检查动画状态时间 - 为什么不起作用?

时间:2017-07-09 18:54:57

标签: c# animation unity3d state animator

我需要在当前动画(动画师中的状态)结束后禁用对象 为什么不起作用?

if (myObject.GetComponent<Animator().GetCurrentAnimatorStateInfo(1).normalizedTime == 1) {
myObject.SetActive(false);
}

1 个答案:

答案 0 :(得分:1)

直接比较floatnormalizedTime == 1并不是一个好主意。只需使用<>=即可。您也可以使用Mathf.Approximately

无论如何,当你开始动画时,启动一个coroutine函数来检查动画是否完成。这可以防止在Update函数中浪费时间来检查动画何时完成。该协程函数应该有一个参数来检查动画的名称。

IEnumerator OnAnimationComplete(string name)
{
    Animator anim = myObject.GetComponent<Animator>();

    while (anim.GetCurrentAnimatorStateInfo(0).IsName(name) && anim.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f)
    {
        //Wait every frame until animation has finished
        yield return null;
    }
    Debug.Log("Animation has finished");
    //Do something
}

<强>用法

1.启动动画。

2.启动OnAnimationComplete协程:StartCoroutine(OnAnimationComplete("JumpAnim"));

还有其他方法可以执行此操作,例如使用AnimationEvent事件。查看提供的链接以获取相关示例。