Как ждать завершения анимации в Unity C#

Я хочу дождаться окончания анимационного клипа после установки триггера.

private void Start()
{
    anim = GetComponent<Animator>();
}


private IEnumerator Die()
{
    // Play the animation for getting suck in
    anim.SetTrigger("Shrink")      

    // Wait for the current animation to finish
    while (!anim.IsInTransition(0))
    {
        yield return null;
    } 

    // Move this object somewhere off the screen

}

Анимация воспроизводится, но она не дожидается окончания, пока не перейдет к коду после цикла while.

Вот мой компонент аниматора:

3 ответа

Вы можете использовать анимационные события Unity ( https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html).

Это маркеры, которые могут быть размещены на временной шкале анимации и позволяют вам указать функцию, которая будет вызываться.

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

Так что в вашем случае это будет выглядеть примерно так:

private IEnumerator Die()
{
    // Play the animation for getting suck in
    anim.SetTrigger("Shrink") 

    yield return new WaitForSeconds(animationTime);

    // Move this object somewhere off the screen

}

Мой первый хит, когда я гуглю "Ожидание аниматора Unity C#": ссылка

private IEnumerator WaitForAnimation ( Animation animation )
{
    do
    {
        yield return null;
    } while ( animation.isPlaying );
}

и так далее.

второй удар: ссылка

//if animation with name "Attack" finished
if (anim.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
{
    // do something
}

и т. д. Google - твой друг

Другие вопросы по тегам