Unity, MoveTowards работает странно - PullRequest
0 голосов
/ 03 декабря 2018

Хорошо, у меня есть gameObjects с тегом "Враг", и я собираю их так:

 enemies = GameObject.FindGameObjectsWithTag("Enemy"); 

После этого я пытаюсь переместить первый "Враг":

     int newPositionX;
     int newPositionY;
     bool targetReached = false;
     int moveSpeed = 1;
     void Update()
     {
     if (!targetReached)
         {
             newPositionX = Mathf.FloorToInt(enemies[0].transform.position.x)-1;
             newPositionY = Mathf.FloorToInt(enemies[0].transform.position.y);
             enemies[0].transform.position = Vector3.MoveTowards(enemies[0].transform.position,
                 new Vector3(newPositionX, newPositionY), moveSpeed * Time.deltaTime);
             targetReached = true;
             }
             if (Vector3.Distance(enemies[0].transform.position, new Vector3(
                 newPositionX, newPositionY)) < 0.1f)
             {
                 targetReached = false;
             }
         }

Но «Враг» не делает никаких ходов.Я могу отредактировать, что если я уберу:

 targetReached = true;

, «Враг» движется, но я никак не могу его остановить.Это заставляет меня думать, что для перемещения функции MoveTowards необходимо постоянно вызываться в обновлении?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Возможно, у вас возникла идея, что Unity - это полноценный игровой движок.

Это не так.

Самые простые вещи, такие как анимация движения и движение, не предусмотрены способамиих предоставляет практически любой другой игровой движок на земле.

Таким образом, вам необходимо загрузить и настроить плагины и дополнения, чтобы получить базовые функциональные возможности.

Ищите движки анимации для Unity и читайте о них, так как вам нужно будет понять их и то, как они включаются в Unity, когда вы в следующий раз встретитесь с отсутствующими основами Unity.

0 голосов
/ 03 декабря 2018

MoveTowards возвращает вектор, который перемещает игровой объект на один шаг в направлении цели.

Кроме того, я не уверен в этом, но, глядя на ваш код, оператор if, который устанавливает для targetReached значение falseзапускается только в том случае, если targetReached уже равен false, поэтому вы можете исключить это из оператора if (! targetReached)

...