Animator里动画的手动混合

一、粗略认识一下两个用来混合的方法

之前接触过Animator里内置的混合树BlendTree,虽然好用,但是因为依附于Animator存在,所以也不是太喜欢。

最近研究Animator代码的时候偶然发现两个方法:

      CrossFadeCrossFadeInFixedTime

看名字也能猜出来应该是用来混合动画的吧

翻了一下官方文档,用人话翻译一下就是:

        CrossFade是按照动画的自身时间进行混合。如果动画10秒,混合持续时间0.2,会在2秒后混合完成

        CrossFadeInFixedTime是按照实际时间进行混合。如果动画10秒,混合持续时间0.2,会在0.2秒后混合完成

        还有一个特性:使用CrossFade或CrossFadeInFixedTime混合时,如果混合时间大于动画自身长度,动画自身会被滞留在最后一帧,直到混合结束。

        所以作为一种trick,也不是不能把这个东西当成动画播放的冷却器。。。

二、详细了解一下这俩方法

        其实真正使用的时候,了解上面的内容,学会咋调用其实就够了,但是毕竟是记录学习的博客,还是把内容都记录下来吧,也算是逼迫自己多学习一点了。

        官方文档的介绍如下:

CrossFadeInFixed介绍
CrossFade

看完了粗略概括一下就是:

签名作用
stateName/stateHashName想过渡过去的状态名字(我还是推荐使用Hash)
fixed/normalizedTransitionDuration过渡到该动画状态的混合时间(视原始动画而定,要么数值要么比例,自行斟酌)
layer发生交叉淡入淡出的图层(在Animator里设置的那个玩意)
fixed/normalizedTimeOffset从多远的地方开始混合(也就是常说的偏移量)
normalizedTransitionTime混合已经进行了多少(就是我们的混合结果从什么位置开始被播放)

实话实说这个Unity文档写的是真的垃圾。。。后面的两个函数签名解释了个寂寞。。。害得我找了好久的解释 。

这是社区里我觉得比较通俗的解释,可以去社区看看。

三、关于后三个时间参数的理解

假设我们有从A->B进行混合过渡,

A状态持续1s,B状态持续2s,调用函数:

CrossFade("B", 0.2f, BaseLayer, 0.05f,0.1f);

我们来逐层分析计算,

0.2f表示我们的混合会使用20%的动画时间来混合

0.05f表示这个混合从动画播放了5%的地方开始取,也就是混合5%到25%的部分

这个时候我们会得到一个时间为(25% * 2) = 0.5s的混合动画,这个动画会在动画过渡的时候播放

0.1f也就是表示,当我们播放这个0.5s的混合动画,会从(10% * 0.5s)= 0.05s的地方开始播放。

大概就是这样一回事了,最后我还是要吐槽一句Unity的文档真的该更新了。。。写的太潦草了吧。。。

如果有错误也请大佬们指出来了(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FurryMonster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值