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,否则就不会回调。

Unity3D中Mecanim动画切换与AnimationEvent的关系》有6个想法

    1. 古拉是头猪 文章作者

      你谈到的这个都是Unity 5以后的新特性吧,我倒还没有真正在项目中使用过Unity 5,所以说不上来具体作用是什么,不过从字面意思来理解的话,Interrupt Source的意思应该指的就是我们使用Trigger或者其他条件让动画A切换到动画B的时候,直接终止A动画的播放,直接硬切过去而不做过渡的意思吧。

      回复
      1. 助人为乐

        谢谢您的回复,请问Write Defaults 是作什么的?我试了很久也没有发现它有什么作用?当在一个空状态上开这个时,会出现怪异的情况?

        回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据