Unity3D 中 Mecanim 动画切换与 AnimationEvent 的关系

在我们的游戏中,我们使用了 Mecanim 动画中的 Generic 动画类型,几乎所有的动画切换和融合,我们都直接交给 Animator 自行处理了。省事倒是省事了,随之也带来了一些不可预知(其实是自己能力不足好吧)的问题。

今天我要分享的是一个这样的问题,例如主角正在进行 A 动作,此时受到攻击通过 Trigger 设置,切换到 B 动作,主角的 AnimatorController 中并没有直接从 A 动作过渡到 B 动作的 Transition,A 动作和 B 动作都是可以从 AnyState 直接切换的,也就意味着 AnimatorController 会自动根据当前动画的状态从当前播放的动画过渡到目标动画中去。

在 A 动作还没有播放完的情况下,我们通过设置 Trigger 的方式将 A 动作切换到 B 动作,而 A 动作上又绑有一些 AnimationEvent,这些 AnimationEvent 会在动画执行到对应的时间轴的时候触发回调,用图来表达,最好不过了。mecanim_transition_animation_event图一中的这种情况,OnSkillEnd 这个 AnimationEvent 是不会被回调的,而在图二中,OnSkillEnd 这个 AnimationEvent 就会被回调。因为每个从 AnyState 出发的 Transition 都是有过渡时间的,如果绑定的 AnimationEvent 所处的时间轴在动画过渡时间之内,那么就会触发这个 Event,否则就不会回调。