Как выполнить код после окончания анимации?

Например персонаж начинает атаковать. Во время анимации булевая переменная attack = true, анимация длиться около секунды и после ее окончания булевая переменная attack должна стать false. Как такое реализовать не прибегая к помощи корутин?


Ответы (2 шт):

Автор решения: Danil

Так можно проверить проигрывается ли в данный момент анимация атаки.

if(this.animator.GetCurrentAnimatorStateInfo(0).IsName("название анимации"))
{
    //attack = true
}
else{
    //attack = false
}
→ Ссылка
Автор решения: Manciny
  1. Открой скрипт, на котором висит аниматор и напиши метод, который обращается к attack и переключает его в false;
    private Animator _animator;
    private void Awake()
    {
        _animator = GetComponent<Animator>();
    }
    public void AttackToogle()
    {
        _animator.SetBool("attack", false);
    }
  1. Открой анимацию с атакой, выдели кадр, заканчивающий атаку(когда нужно переключить в false) и нажми Add event. Над кадром появится флажок:

  2. Не закрывая окна с анимацией кликни на объект с Animator, и в окне с анимацией кликни на этот флажок. В инспекторе отобразится раздел Animation Event с одним поле: Function. Там и выбираем ранее написанный метод, который переключает в False бул attack:

  3. Всё, кайфуем. Или начинаем думать, как подстроить этот способ под свой проект, если там много разных юнитов, использующих эту же анимацию, копая интернет в сторону Animation event.

P.S. Предполагаю, что attack = true прописано в методе, вызываемом атаку.

→ Ссылка