使用 Animator 时如何等到动画完成?

How to wait until animation is finished when using Animator?

这是一个初学者问题,应该可以从第一个 google 结果中找到,但我找不到它。

我有使用 Animator:

播放动画的方法
IEnumerator popDownAnimation(string c)
{
    animator = GetComponent<Animator>();
    animator.Play("Pop Down Animation");
    yield return new WaitUntil(() => animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && !animator.IsInTransition(0));
    animator.Play("New State");
}

不记得我从哪里得到的,但是 yield return new WaitUntil(() => animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && !animator.IsInTransition(0)); 不工作。从“Pop Down Animation”瞬间跳到“New State”,所以“Pop Down Animation”没有机会播放

我建议使用动画事件来做任何你需要的事情。只记得制作一个 public 方法并在动画结束时添加动画事件。

试试这个

IEnumerator popDownAnimation(string c)
{
   animator = GetComponent<Animator>();
   animator.Play("Pop Down Animation");
   float animationLength = animator.GetCurrentAnimatorStateInfo(0).length;
   yield return new WaitForSecondsRealtime(animationLength);
   animator.Play("New State");
}

但是,就像@NotVeryGoodAtThis 提到的那样,我不会在代码中执行此操作,除非您有特定原因无法使用动画事件或使用动画器中的参数在动画状态之间转换。使用 Unity 的 Animator window 设计动画并使用状态、参数和转换比通过代码进行设计更容易管理,尤其是当您的动画师变得更加复杂时。