Creator3.0的Animation的crossFade方法切换动画完全没过渡啊,全是瞬间切动画

开始用的时候还以为可以像unity的Animator的动画切换一样,可以从一个动画状态平滑过渡到另一个状态,结果用了发现全是瞬间切换,跟直接animation.play(“动画”)没区别。比如站立到蹲下两个动画状态,如果是unity做切换的话会有站立慢慢变换到蹲下这个过程,而creator3.0是上一帧是站立,下一帧是蹲下,表现很突兀,crossFade的第二个时间变化参数无论怎么设置都没效果。

最后还有一点,我要拿到当前正在播放那个动画,找不到方法,唯一一个拿动画状态的是animation.getState(“动画”);但是这个是拿指定的动画,并不知道当前是播放哪一个。
unity的Animator获取当前播放动画有这样一个函数可以得到
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo();
creator引擎方是否能提供类似一个这样的方法方便开发者获取当前播放的动画状态呢。

还有提供类似unity的stateInfo.normalizedTime;(值在0-1之间) 这个属性让开发者知到当前动画的播放进度,大于等于1即为播放结束,Mathf.Floor(stateInfo.normalizedTime)代表已经播放了多少次。

crossFade 没效果?test-cases-3d里面有切换的测试例,前两天还测了没问题。

creator引擎方是否能提供类似一个这样的方法方便开发者获取当前播放的动画状态呢。

没提供是因为 crossFade 的存在,导致同时可能有多个动画在播放。

还有提供类似unity的stateInfo.normalizedTime;(值在0-1之间) 这个属性让开发者知到当前动画的播放进度,大于等于1即为播放结束,Mathf.Floor(stateInfo.normalizedTime)代表已经播放了多少次。

.time/.duration 可以试试?

Player.zip (1.1 MB)
给你个火柴人动画资源,里面有一个待机(Idle),两个攻击动作(Attack1,Attack2)。你用crossFade做切换看,从Attack1切换到Attack2看能不能做到动画过渡,我测试的时候,这三个动画都是瞬间切换的,无过渡,用的是creator3.0.0。

因为混合动画Animation无法获取当前播放动画,这个动画组件做3d动画就不合适了。是否下个引擎版本能引入Animator,既然无法获得当前动画,获取当前动画状态机状态还是可以的。如果无法知道当前动画在做什么,开发游戏就很难进行下去。

animation.time 和 animation.dutation试过了,在动画只播一次的情况下,发现animation.time 的值会大于animation.dutation。animation.dutation不是单次动画的总时间吗,animation.time怎么会大于animation.dutation,这是不是bug。如果不是bug,我怎么判断动画的播放进度,如已经播放了80%,100%

.time 是累计播放时间。

我怎么判断动画的播放进度,如已经播放了80%,100%

.current.ratio

我也碰到crossFade没有动画过渡效果,官方的demo又确实有过渡效果

然后我发现一个区别,官方的demo,所有动画做到同一个模型里,是不是动画分开在不同的模型里,就没有过渡效果,同一个模型里就可以过渡? 会是这个原因吗?

有点想不明白,动画只播一次,累计播放时间怎么也不可能超过动画总时间啊,我的动画一共10秒钟,播放结束后累计播放时间也应该是10秒才对。

我之前测试的动画是duration是0.96秒,播放结束时time是0.98秒。一直没搞清time到底是个什么意义。

就是累计呀,就是比如你动画是循环模式周期 10s ,那播放了两遍,那就是累计播放了 2 * 10s 秒,你可以通过 20 / 10 得知它已经放了两遍了。

QQ图片20210408113814


可能是这个原因,我的动画每个动作都是放在独立的fbx文件里,有几个动画就有几个fbx文件,然后再把这些动画的clip拖到同一个Animation组件里,这样的情况动画切换没过渡。官方的demo可能是,把所有动画全放在同一个fbx文件里,然后分割帧作为动画。官方没考虑过我的这种这种情况,所以我的做不到动画过渡

我是说只播放一遍的情况下,也就是动画的WrapMode的值设置为Normal,播放一次的情况,time不可能超过duration的

是的,现在不符合你的预期?动画是 normal 的话,播放一遍,time 不会再更新了

对了,我给你那几个火柴人动画,你测试过了吗,能不能过渡动画

啊 你有发给我吗?没找到,能再发一份吗?

Player.zip (1.1 MB)
这个是动画资源,你们引擎组内部测试一下,可能你们没有考虑过这种动画的情况。

这个动画是每种动画状态分开在不同的fbx文件里,很普遍的做法。unity运行没问题,creator3.0和3d都不能平滑过渡动画

我试下看看。

3个动画文件,随便拉一个到场景里,然后把另外两个的clip拖拽挂在这个动画组件的Clips上就可以了 ,然后测试一下动画过渡,看是不是过渡不了,全是瞬间切换

大佬,问题验证了吗,还希望你下个版本能改掉这个问题呢。

我试了 crossFade 没问题,你是不是没有勾掉 UseBakedAnimation

1赞

窝C,去掉UseBakedAnimation的勾选就可以了。
这个问题太隐蔽了,你不说,基本每个开发者都会遇到这样的问题。

哈哈 牛掰 完胜

一样遇到这个问题,我感觉我被恶心到了