Unity Animation Event не срабатывает
Анимация Move состоит из одного кадра и одного Event. В случае, если эта анимация начинается после End, игрок зависает в состоянии Move, но метод из Event не запускается, что блокирует движение.
Код, где происходит зависание:
private IEnumerator PostMove()
{
// ждём окончания движения
while (animator.GetBool("isMove")) { yield return new WaitForFixedUpdate(); }
// запускаем корутину обычного движения
mainDirection = secondDirection;
animator.SetBool("isMove", true);
secMovement = null;
secondDirection = Direction.zero;
}
После переключения состояние в строке animator.SetBool("isMove", true); Происходит переключение на Move, но Event не срабатывает.
При добавлении yield return new WaitForFixedUpdate(); перед animator.SetBool("isMove", true); всё работает лучше, но иногда всё также зависает.
Пробовал использовать State Machine Behaviours:
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.GetComponent<Player>().StartMove();
}
Но и тут аналогичная ситуация.
Почему в этом случае не срабатывает Event и как это можно исправить?
Ответы (1 шт):
Разобрался. Глупая ошибка, но вдруг кому-то поможет. Event и подобные функции Unity не срабатывали из-за того, что animator и не выходил из своего состояния, несмотря на animator.SetBool("isMove", false); , ибо, видимо, в том же кадре оно возвращалось обратно, следуя указаниям скрипта управления, в моём случае.
Выяснил экспериментальным путём с помощью State Machine Behaviours.
