@PRIYD

Уместно ли тут использовать корутину?

Здравствуйте.
Задача: добавление анимации персонажу при повороте(при нажатии на клавишу А - поворот на 90*, при нажатии на S - поворот на 180*, при нажатии на D - поворот на -90*). После того, как проигралась анимация поворота(и персонаж повернул, соответственно), состояние должно вернуться в idle-анимацию.
Как я решал: создал корутину, которая ждет 1 сек и после возвращает состояние в idle. Код:
bool isWPressed = Input.GetKey(KeyCode.W);
        
if ( (Input.GetKey(KeyCode.D)) && (!isWPressed) )
{
     animator.SetBool("isLeftTurn", true);
     yield return new WaitForSeconds(1f);
     animator.SetBool("isLeftTurn", false);
}
else if ( (Input.GetKey(KeyCode.A)) && (!isWPressed) )
{
     animator.SetBool("isRightTurn", true);
     yield return new WaitForSeconds(1f);
     animator.SetBool("isRightTurn", false);
}
else if ( (Input.GetKey(KeyCode.S)) && (!isWPressed) )
{
     animator.SetBool("isBackTurn", true);
     yield return new WaitForSeconds(1f);
     animator.SetBool("isBackTurn", false);
}


Скриншот аниматора:
5eca176d3cc54008185781.png

Проблема: все работает, но что-то подсказывает, что это костыль и можно сделать правильнее. Какие альтернативы?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 3
zagayevskiy
@zagayevskiy
Android developer at Yandex
Наверняка у этого аниматора есть коллбек на окончание анимации. Если нет, я буду удивлён.
Ответ написан
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
Можно добавить вызов события в саму анимацию, в конец (но это не лучший вариант, т.к. анимация в Unity не обязательно проиграется до 100%, может остановиться на 99.9%).

Можно сделать анимацию длительностью в 1 секунду и выходить из неё в Idle по окончанию проигрывания.
Ответ написан
SKyRo
@SKyRo
GameDev, Unity, C#, Blender
Вы можете переходить в состояние поворота по триггеру, а дальше Has Exit Time.
Доки: Animation Parameters ; Animator.SetTrigger
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Tiamat Games Москва
от 75 000 до 125 000 ₽
Stark Games Минск
До 3 500 $
ФинГрад Москва
от 80 000 до 150 000 ₽