情景是在动画播放完成时触发事件。
刚开始采用给动画绑定AnimationEvent来实现功能,后来出了问题:部分动画需要倒播,导致播放完成事件在播放开始时触发。
然后在动画播放协程内监测动画播放时间
Animator.GetCurrentAnimatorStateInfo(0).normalizedTime
如果这个值大于1,说明动画播放完毕。
结果今天发生了新问题:动画重复播放后,事件直接触发。研究后发现:第一次播放完成时,normalizedTime已经大于1了,每帧的检测结果大概是0.1,0.2,0.3…1.1。然后在第二次播放时,尽管播放函数Animator.Play(aniName,-1,0)在检测判断之前,但检测结果居然是1.1,0.1,0.2…,导致了一开始就通过了“动画已播完?”的判断。所以可说明:Animator.Play(aniName,-1,0)内部存在短暂延时。
解决方法是在上述两行代码中间插入三行:
while (Animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 1f)
{
yield return null;
}