• Как реализовать преследование в UNITY, но только по осям X и Z?

    CHIDWI
    @CHIDWI
    PsyDuckbest, На самом деле есть несколько подходов. Могу отметить это как задание со *, потому что если ты ищешь простое решение в две строки, то скорее всего ты его не найдёшь.
    Первый и единственный верный вариант который я вижу это написать свой контроллер ходьбы, единый и для бота, и для игрока. Что бы в первую очередь игрок двигался строго по клеткам вверх/вниз/влево/вправо. Затем под это управление адаптировать логику бота(он чекает координаты игрока относительно своих и передаёт команды в контроллер управления типо влево, влево, вверх, влево).
    Но есть и второй вариант, он мне не нравится, но вполне применим и довольно прост, результат будет очень похож на желаемый. Вот он:
    spoiler

    private GameObject hero;
        private Vector3 targetPos;
        private Rigidbody rb;
        public float speed = 2f;
    
        private void Start()
        {
            rb = GetComponent<Rigidbody>();
            hero = GameObject.FindWithTag("Player");
        }
    
        private void FixedUpdate()
        {
            targetPos = hero.transform.position;
            rb.position = Vector3.MoveTowards(this.gameObject.transform.position, NextStepPositionGenerator(), Time.deltaTime * speed);
        }
    
        private Vector3 NextStepPositionGenerator()
        {
            Vector3 nextStep = this.gameObject.transform.position;
                if (targetPos.x - nextStep.x > 0)
                {
                    nextStep += new Vector3(1, 0, 0);
                }
    
                if (targetPos.z - nextStep.z > 0)
                {
                    nextStep += new Vector3(0, 0, 1);
                }
    
                if (targetPos.x - nextStep.x < 0)
                {
                    nextStep -= new Vector3(1, 0, 0);
                }
    
                if (targetPos.z - nextStep.z < 0)
                {
                    nextStep -= new Vector3(0, 0, 1);
                }
            return nextStep;
        }

  • Как реализовать преследование в UNITY, но только по осям X и Z?

    CHIDWI
    @CHIDWI
    PsyDuckbest, тут много чего не правильно. Например в старте ты указал координаты игрока и как бы всё... то есть ты указал что игрок стоит в координатах например 1,1,1 и всё. И дальше твой код будет вести бота туда, не зависимо от того, где сейчас находится игрок. Следовательно координаты игрока нужно переносить в апдейт.
    MoveTowards обеспечивает плавное передвижение из точки А в точку Б. Но проблема в том, что точка А у нас может быть любой, она не округляется(да и нельзя этого делать, иначе при данном подходе - игрок ходить не сможет). Точка Б - ок, она у нас выровнена по координатам.
    Поэтому из простых вариантов, перенести строку target из старта в апдейт.
    Из сложных и правильных, подключать навмеш, заменить find и апдейт поменять на фикседапдейт(но эт под вопросом).
  • Как реализовать преследование в UNITY, но только по осям X и Z?

    CHIDWI
    @CHIDWI
    PsyDuckbest, с этого и надо было начинать) смотри, тебе координаты цели для перемещения нужно округлять через Mathf.Round. Например так:
    Vector3 target = new Vector3(Mathf.Round(hero.transform.position.x), 0.5f, Mathf.Round(hero.transform.position.z));

    Перемещение игрока делается по тому же принципу.
  • Что за баг с юнити?

    CHIDWI
    @CHIDWI
    Дядя Богдан, думаю стоит всё же переустановить редактор для начала, да и VS желательно, а потом заново установить через UnityHub. Unity хоть и довольно стабильный редактор, но баги есть и когда чет работает не так как надо, быстрее будет переустановить. Выключить перекомпиляцию проекта когда сцена запущена. Если перезайти в проект после создания, эта чепуха продолжается? Что по железу? Винда офф или "пиратская легковесная сборка"?
  • Как запустить поток?

    CHIDWI
    @CHIDWI
    Георгий Кузнецов, Так я и не говорю заморачиваться с потоками). Описанным мною способом можно например реализовать паузу и тд. тоесть происходит нажатие на кнопку и в скрипт-менеджере отключается вызов скрипта main или управление героем, а скрипт таймер и управление меню, продолжают работать.
    Если интересна работа с потоками и их разделением(но опять же там довольно ограниченный функционал и возможности) то можно смотреть в сторону Unity DOTS.
  • Поможете решить генерацию объектов в Unity?

    CHIDWI
    @CHIDWI
    Svet_Ars, вопрос же был о вариантах, а их уйма) Странного в вашем подходе ничего не вижу, это вполне рабочий вариант. Реализация и код, да... над ним стоит поработать, goto и while лучше не юзать, но сама логика верна. Если по правильности, то стоит генерить объект в пределах координат и вносить в список, после этого генерить новый обьект и проверять что бы он не создавался в координатах уже созданных объектов ну и тд.
  • Поможете решить генерацию объектов в Unity?

    CHIDWI
    @CHIDWI
    Svet_Ars, А почему нельзя делать это в рантайме?) Не думаю что там миллион высокополигональных моделей, сотня это капля в море. Если есть переживания по поводу нагрузки, то можно использовать пул объектов. Или и вовсе расставить объекты по местам и просто выключать/включать их. Нейросеть писать для этого - бессмысленно, можно создать массив с координатами заранее где должны или могут располагаться объекты или же делать проход по координатам вы же знаете какие размеры должны быть у игровой зоны, например координаты текущего обьекта+смещение по Х и тд.
  • Как сделать проверку что персонаж стоит на земле?

    CHIDWI
    @CHIDWI
    Женя Залецкий, В моём идеальном мире, люди используют движок для 3д игр). Я уверен, что персонаж не двигается и без "моего кода". Например horizontalSpeed = 0, возможно из за этого, OnCollisionEnter используется для 3д объектов. На героя должен быть коллайдер и ригидбоди, на "земле" должен быть коллайдер и все они должны быть 2д. И импульс для ригидбоди измеряется ньютонах, поэтому 0.5f, так то маловасто даже для 1кг объекта.
    spoiler
    {
        public float horizontalSpeed = 0.3f;
        public float verticalimpulse = 500f;
        public bool isJump;
    
        float speedX;
        Rigidbody2D rb;
    
        void Start()
        {
            rb = GetComponent<Rigidbody2D>();
        }
    
        void FixedUpdate()
        {
            if (Input.GetKey(KeyCode.A))
            {
                speedX = -horizontalSpeed;
                transform.localScale = new Vector3(-0.5f, 0.5f); //Персонаж смотри в ту сторону, куда нажал игрок
    
            }
            else if (Input.GetKey(KeyCode.D))
            {
                speedX = horizontalSpeed;
                transform.localScale = new Vector3(0.5f, 0.5f); //Персонаж смотри в ту сторону, куда нажал игрок
            }
    
    
            if (Input.GetKey(KeyCode.Space) && !isJump)
            {
                rb.AddForce(new Vector2(0, verticalimpulse));
                isJump = true;
            }
            transform.Translate(speedX, 0, 0);
            speedX = 0;
        }
    
        private void OnCollisionEnter2D(Collision2D collision)
        {
            if (collision.gameObject.tag == "Ground") //проверка что обьект столкновения имеет тег ground
            {
                isJump = false; //помечаем что мы столкнулись с землёй и можем снова прыгать
            }
        }
    }
  • Как исправить ошибку CS0246?

    CHIDWI
    @CHIDWI
    Yura111, единственные две папки которые важны и нельзя удалять это Assets и ProjectSettings.
    Папка Library создаётся при первом запуске проекта и хранит в себе метафайлы и тд. Очень похоже что ошибка произошла именно в ней, изза добавления а потом удаления плагина.
  • Как исправить ошибку CS0246?

    CHIDWI
    @CHIDWI
    Yura111, а пост процессинг есть?
    в любом случае, сперва закройте редактор Unity, зайдите в папку проекта у удалите папку Library, после запустите Unity и скорее всего ошибки не будет
  • Как исправить ошибку CS0246?

    CHIDWI
    @CHIDWI
    Yura111, Window->Render Pipeline->HD Render Pipeline Wizard или Edit->Render Pipeline
    и там есть 4 кнопки, вам нужно как минимум Upgrade Project Materials to High Definition Materials. И почитать документацию.602e69628071e118393652.png
  • NullReferenceException: Object reference not set to an instance of an object почему?

    CHIDWI
    @CHIDWI
    WeBBeW, Сперва нужно получить доступ к этому скрипту и если прочесть что значит ошибка, можно многое понять. Можно пометить обьект статиком как там написано, можно через Find() найти, много как можно получить доступ. Самое простое описано ниже. И не совсем понятно для чего делать public поля еще и сериализируемыми, но это уже ваше дело так сказать.
    public InventoryWindow inventoryWindow; //сюда затягиваем в инспекторе обьект на котором висит скрипт InventoryWindow
    
    private void Start()
    {
     this.inventoryWindow.Redraw(); //теперь можно это сделать
    }

    Если честно, то при возникновении подобных вопросов, стоит почитать мануалы/видосики/документацию, дабы понимать основы.
  • NullReferenceException: Object reference not set to an instance of an object почему?

    CHIDWI
    @CHIDWI
    Так а с чего бы им взяться, если (new InventoryWindow()).Redraw();
    Нужно тогда сперва было бы задать параметры для них или обьекты, а потом вызывать метод. Хотя мне кажется что было бы достаточно просто вызвать метод Redraw() без создания экземпляра класса. Это всё вилами по воде конечно, так как надо тестить.
  • Почему не срабатывает Platform Effector 2d?

    CHIDWI
    @CHIDWI
    добавь банальную проверку падения или проверяй по кординатам и отключай управление
  • Дайте совет про создание 3D игр на Unity под Android?

    CHIDWI
    @CHIDWI
    blackandyellow13, Многое зависит от вашей команды и есть ли она вобще. Лишним уж точно не будет. Часто бывает так что в небольшом проекте, нужно что то добавить, мелочь изза которой всё стопорится и приходится ждать дизайнера/аниматора/моделера. Хорошо еще уметь оптимизировать модели по кол-ву полигонов и настраивать лоды для них. Но опять же, всё зависит от конкретной задачи. Можете загуглить что то в стиле "топ ошибок в мобильной разработке на Юнити"(это я так от балды написал, важен только смысл), я думаю в такой статье/видео ответят на множество ваших вопросов, которые вы возможно даже не собирались задавать.
  • Как в моём случаи лучше реализовать механику в Unity3D?

    CHIDWI
    @CHIDWI
    А зачем bool и лишние вычисления? Кажется я доступно описал как сделать то что вы описали в вопросе.
  • Какой способ поиска пути в Unity оптимален?

    CHIDWI
    @CHIDWI
    Ну тут кто что понимает.) Можно натыкать геймобжектов пустых и создать "маршрут" проходящий к "цели", через них... Это всё очень абстрактно и возможно в каком-то случае это оптимальный вариант. Хотя для меня всё-же лучше было бы делать через НавМеш. Райкасты канают, когда это допустим гонки или что-то такое, а в случае с лабиринтом, ну даже не знаю. Зачастую самый простой вариант, это использовать функции 3д, плейник и спрайты повернул, и всё работает. Это всё моё личное мнение и не претендует быть правдой.
  • Написал код движения персонажа, но он не работает, что делать?

    CHIDWI
    @CHIDWI
    А что конкретно не работает? Персонаж двигается но не разворачивается?
  • На выключатель подавать фазу или ноль?

    CHIDWI
    @CHIDWI
    Плохие лампы с низкокачественными драйверами. Иногда попадаются такие светильники, что от них идёт такая помеха... Провод питающий розетку лежит рядом с проводом идущим на лампу. Так вот при включении в розетку акустики или радио приёмника и включении этого "чудо" светильника идут такие помехи, что музыку уже не слышно.