Почему анимация не останавливается после выполнения условия цикла

#unity3d #animation #while-loop

Вопрос:

Персонажи перемещаются с одной стороны экрана на другую. Движение заканчивается, когда циклы while завершены, но анимация «Выполнить» продолжается.

 void Update()
{ 

if(selected == true)
Move()

}

void Move() 
{

pos = left.transform.position;

StartCoroutine(MoveOverTime());

IEnumerator MoveOverTime()
        {
            while (transform.position != pos)
            
            {
               
                transform.position = Vector3.MoveTowards(transform.position, pos, 0.04f * Time.deltaTime);
                animator.Play("Run");
                yield return null;
            }
       selected = false;
     yield return null;

      }
}
 

Комментарии:

1. Хорошо данный pos изготовлен из поплавков. Весьма вероятно, что 2 значения никогда не будут точно равны

Ответ №1:

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

Попробуйте использовать (transform.position - pos).magnitude > 0.1f вместо этого. Вы можете настроить точность по своему усмотрению.

Комментарии:

1. извините, но пока ((transform.position — pos).величина

2. @cfdoh извините. Вместо этого должно было быть>. Надеюсь, вы уже поняли это.