• Как вызвать класс из другого скрипта (прикреплены к одному объекту)?

    K0TlK
    @K0TlK
    Hiniks YouTube, Вместо того, чтобы кидать несколько скриншотов, просто скиньте код всего объекта. Вы метод Stop в Player объявили?
  • Почему может замедляться скорость стрельбы, когда остаётся 1 враг?

    K0TlK
    @K0TlK
    yraiv,
    public List<GameObject> zombieArray = new List<GameObject>();
    public List<GameObject> ZombieMaxArrayList = new List<GameObject>();
    public List<GameObject> zombieArrayNew = new List<GameObject>();

    Почему их три? Зачем? Почему от GameObject, когда у вас уже есть класс ZombieStandart, который вы впоследствии получаете через GetComponent.

    public Rigidbody2D bullet;
    Почему Rigidbody, когда можно Bullet или что у вас там отвечает за пулю?
    public int ZombieArrayGivePosition;
    Что это такое, почему инт? Что оно означает? Зомби массив давать позиция?
    public int thisAtackTower;
    Это что такое, почему инт? Что оно означает?
    void OnTriggerEnter2D(Collider2D collider)
        {
            if (collider.gameObject.tag == "Zombie")
            {
                zombieArray.Add(collider.gameObject);
            }
        }

    Проверка по тэгу == плохо, нельзя так делать, можно легко ошибиться и написать в строке не то что надо и искать потом где ошибка. Это делается через получение компонента:
    private void OnTriggerEnter2D(Collider2D collider)
    {
        if (collider.TryGetComponent<ZombieStandart>(out ZombieStandart zombie)
        {
            zombieArray.Add(zombie);
        }
    }

    Соответственно zombieArray должен быть от типа ZombieStandart, а не от GameObject.
    В OnTriggerExit и OnTriggerStay то же самое.
    Все еще не понятно зачем ZombieMaxArrayList нужен, выглядит как какой-то рудимент.
    Зачем эти приписки в конце (Array, List)? Чтобы не забыть, что это список? _zombies или подобное недостаточно говорит о том, что это какой-то массив данных?

    transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, Mathf.Atan2(target.transform.position.y - transform.position.y, target.transform.position.x - transform.position.x) * Mathf.Rad2Deg + 90);

    Это вы так метод transform.LookAt реализовали?
    private void ChekDistante()
    CheckDistance - если я правильно понял. Используйте гугл транслейт чтобы переводить слова, которые не знаете как правильно написать. Я не понимаю что делает этот метод. Какую он дистанцию проверяет, до чего? Если нужна дистанция до какого-то объекта, то есть метод Vector3.Distance.

    Скорее всего, проблема в методе ChekDistante потому что там творится какая-то ересь, которую поймет только ее создатель. Да и метод Fire тоже не совсем то делает, что нужно. Он не должен сам ожидать, ожидание должна выполнять корутина, Fire должен просто проверить, есть ли возможность сейчас стрелять и стрельнуть. Далее уже запускается корутина и делает отсчет времени.

    Ваша проблема в том, что вы выбрали себе слишком сложную задачу. Поделайте что-то простое типа FlappyBird, DoodleJump и других подобных гиперказуалок. Научитесь делать хотя бы эти игры, а потом переходите на жанры сложнее. Tower Defence или что вы пытаетесь сделать, слишком сложно для вас. Для начала изучите как разделять код на компоненты правильно и как с этими компонентами работать. Изучите основы.

    Где изучать юнити - https://learn.unity.com/
    Где изучать программирование - https://ulearn.me/
  • Почему может замедляться скорость стрельбы, когда остаётся 1 враг?

    K0TlK
    @K0TlK
    yraiv, Выложите полностью код компонента, по этому обрезку не понять общей картины. Вот это вот страшилище
    Rigidbody2D clone = Instantiate(bullet, gunPoint.position, Quaternion.identity) as Rigidbody2D;
    clone.GetComponent<BulletEnter>().atack = thisAtackTower;
    clone.transform.up = gunPoint.up;
    clone.velocity = clone.transform.up * speed;


    заменяется на это:
    var bullet = Instantiate<Bullet>(bullet, gunPoint.position, Quaternion.identity);
    bullet.Shot(direction);


    Соответственно компонент Bullet должен иметь метод Shot(Vector2 direction) который принимает направление и придает себе движение в том направлении. И, если уж это какая-то пуля, то атаковать она должна сама, ей не должен кто-то говорить, что это ее таргет и вот его нужно атаковать.
  • Как соединить объекты?

    K0TlK
    @K0TlK
    Переместить один объект в иерархии на другой? Если вы хотите из нескольких объектов слепить другой цельный, который будет отображаться не как несколько объектов, а как один, то вам не в юнити нужно а в блендер или еще куда-нибудь.
  • Как сделать что бы кнопка была большего размера в самой игре unity?

    K0TlK
    @K0TlK
    seregahalz, Во-первых в канвасе настроить скейлинг элементов. 1.Выбрать режим скейлинга Scale with screen size означает, что при изменения размеров экрана, будут меняться ui элементы в этом канвасе. 2.Выставить желаемое разрешение. 3.Выставить ScreenMatchMode нужный вам.
    6237148e72a08523415056.jpeg
    У ui элементов есть компонент RectTransform, в нем настраиваются размеры и т.д.
    623714d3abbfe696942369.jpeg
  • Как сделать что бы кнопка была большего размера в самой игре unity?

    K0TlK
    @K0TlK
    Кнопка в пределах канваса находится в окне сцены?
  • Как сделать проверку нахождения объекта в триггере?

    K0TlK
    @K0TlK
    a, Что-то вы перекостылили. Гораздо проще выделить интерфейс, который будут реализовывать все отключаемые объекты и работать через него посредством событий. Что-то типа этого:
    using System;
    using UnityEngine;
    
    namespace Assets.Scripts
    {
        public class ObjectDisabler : MonoBehaviour, IDeactivatable
        {
            public event Action Deactivated;
            public event Action Activated;
    
    
            public void Activate()
            {
                gameObject.SetActive(true);
                Activated?.Invoke();
            }
    
            public void Deactivate()
            {
                gameObject.SetActive(false);
                Deactivated?.Invoke();
            }
        }
    
        public interface IDeactivatable
        {
            event Action Deactivated;
            event Action Activated;
            void Activate();
            void Deactivate();
        }
    }

    ObjectDisabler - это объект, который вы выключаете, а не какой-то отдельный объект, названия нормальные у меня нет желания придумывать.
    Таким образом, нам не нужно получать целый объект, чтобы вызвать у него метод SetActive, тем самым нарушив инкапсуляцию. Мы просто получаем интерфейс и через него работаем:
    using UnityEngine;
    
    namespace Assets.Scripts
    {
        public class TriggerTest : MonoBehaviour
        {
            private IDeactivatable _deactivatable;
            private void OnTriggerEnter(Collider other)
            {
                if (other.TryGetComponent(out IDeactivatable deactivatable))
                {
                    _deactivatable = deactivatable;
                    _deactivatable.Deactivated += ExitTrigger;
                }
            }
    
            private void OnTriggerStay(Collider other)
            {
                Debug.Log("TriggerStay");
            }
    
            private void OnTriggerExit(Collider other)
            {
                ExitTrigger();
            }
    
            private void ExitTrigger()
            {
                Debug.Log("TriggerExit");
                _deactivatable.Deactivated -= ExitTrigger;
            }
        }
    }


    Интерфейс IDeactivatable можно (и нужно) разделить на 2 разных, чтобы были отдельно ивенты и отдельно методы. Теперь все объекты, которые нужно отключать извне, должны реализовывать этот интерфейс и делать в них то, что нужно, чтобы отключить объект. Таким образом, не будет каких-то неожиданных отключений через SetActive и состояние объекта не будет ломаться. Также, я вижу, что вы делаете проверки по тэгу, этого делать не следует, т.к. это проверки по строковому литералу и они ненадежны (можно ошибиться и написать вместо Cube - cube и т.д и потом сидеть искать где же ошибка), гораздо надежнее проверять по типу через GetComponent. Также вы в OnTriggerStay делаете GetComponent вместо того, чтобы просто получить компонент единожды в OnTriggerEnter и закешировать его, это может вызвать проблемы с производительностью, если объектов будет очень много на сцене. Также вам, по всей видимости, абсолютно не нужен метод OnTriggerStay, т.к. все, что там делается не нужно делать пока объект находится в триггере, замените его на OnTriggerEnter. (OnTriggerEnter вызывается единожды, при входе в триггер, OnTriggerStay много раз пока объект находится в триггере, OnTriggerExit единожды при выходе из триггера)
  • Как правильно отображать кнопки на 3d объекте?

    K0TlK
    @K0TlK
    Gregory256, Вот, с этого и нужно было начинать. Тогда вам нужно не куб на UI вешать, а изображения на этот куб и отслеживать нажатия по ним.
  • Как правильно отображать кнопки на 3d объекте?

    K0TlK
    @K0TlK
    Gregory256, Канвас - это 2д пространство, там не надо вращать объекты как в 3д. Какую цель вы преследуете, что вы хотите сделать?
  • Как решить эту проблему с Unity?

    K0TlK
    @K0TlK
    Полностью ошибку прочитайте, что там написано?
  • Как правильно отображать кнопки на 3d объекте?

    K0TlK
    @K0TlK
    Gregory256, Так. Я ничего не понимаю. Вы на канвас повешали куб что ли?
  • Как правильно отображать кнопки на 3d объекте?

    K0TlK
    @K0TlK
    Gregory256, сделайте скрин того, как у вас это все в окне эдитора выглядит.
  • Как правильно отображать кнопки на 3d объекте?

    K0TlK
    @K0TlK
    Зачем вообще отображать ui элементы типа кнопок на 3d объекте? Что вы пытаетесь сделать?
  • Почему в профайлере нет overview?

    K0TlK
    @K0TlK
    yraiv, так на график то этот нажмите.
  • Почему в профайлере нет overview?

    K0TlK
    @K0TlK
    yraiv, ну так сцену то запустить сначала надо. И кружочек сверху должен красным быть
  • Почему в профайлере нет overview?

    K0TlK
    @K0TlK
    6235ff694d276518378889.jpeg Если вам нужно то, что обведено - то нажать туда, куда указывает стрелочка и выбрать hierarchy или raw hierarchy.
  • Проблема с смертью в Unity 2D?

    K0TlK
    @K0TlK
    Внимательно посмотрите на эту строчку: private void onCollisionEnter2D(Collision2D other) Ничего не смущает?
  • Как пофиксить баг с MousePosition?

    K0TlK
    @K0TlK
    ChelSiharpniy, Гений, прежде чем строчить на форумах вопросы, изучи хоть основы фреймворка с которым ты работаешь.
    var position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    position.z = transform.position.z;
    transform.position = position;


    Вот так это делается, изменяешь все, кроме оси, которая тебе не нужна.
    Курсы по юнити от юнити: https://learn.unity.com/courses
    Основы программирования: https://ulearn.me/
  • Как пофиксить баг с MousePosition?

    K0TlK
    @K0TlK
    Ну так не перемещайте объект по Z координате.