Unity上一个动画的Duration导致下一个动画的事件被调用多次

情景

我用一个blendtree:JumpAndFallBlendTree来切换Jump和Fall的动画,当inAir为true时进入,当inAir为false时退出。当人物着地时,我将inAir置为false,将land置为true,播放Land着陆动画。
为了不让Land动画播放太长时间,想提前结束Land动画的播放,我在Land动画中添加了一个事件,在事件中,将land置为false将idle置为true,让动画切换到Idle。
Animator状态图

问题

实际运行中发现,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动画。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值