情景
我用一个blendtree:JumpAndFallBlendTree来切换Jump和Fall的动画,当inAir为true时进入,当inAir为false时退出。当人物着地时,我将inAir置为false,将land置为true,播放Land着陆动画。
为了不让Land动画播放太长时间,想提前结束Land动画的播放,我在Land动画中添加了一个事件,在事件中,将land置为false将idle置为true,让动画切换到Idle。
问题
实际运行中发现,Land中的事件被触发了两次,我在这个事件中进行了动画切换,为什么这个事件会被调用第二次?
分析
我一直以为是Land->Idle的问题,结果问题偏偏是源于上一个动画JumpAndFallBlendTree。
在JumpAndFallBlendTree混合树中,我忘记取消过渡时间Duration,其值为默认的0.25s,导致在进行Fall->Land切换的时候,Fall动画和Land动画混合播放,使得Land的事件第一次调用发生在过渡时间内,虽然在第一次事件调用时就将land置为了false,但不会立即切换到Idle,因为现在是在过渡时间内!0.25s没过完是不会切出去的!!!
测试
我尝试把过渡时间改短或设为0,Land的事件只被触发了一次,因为在过渡时间内没有Land动画没有来得及播放有事件的那一帧。
我接着又尝试把过渡时间改长,例如设为0.6s,则Land动画的事件被调用了三次。
结论
以上测试说明我的事件都是在过渡时间内触发的,虽然在事件调用时将land设为了false,但是过渡时间还没有结束,必须等到过渡时间结束才切换到Idle动画。