我需要在当前动画(动画师中的状态)结束后禁用对象 为什么不起作用?
if (myObject.GetComponent<Animator().GetCurrentAnimatorStateInfo(1).normalizedTime == 1) {
myObject.SetActive(false);
}
答案 0 :(得分:1)
直接比较float
和normalizedTime == 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
事件。查看提供的链接以获取相关示例。