在Unity中,Animator
组件有一个名为GetCurrentAnimatorStateInfo
的函数。它返回一个具有normalizedTime
字段的AnimatorStateInfo
对象。
该字段是一个浮点值,其中整数部分表示动画师当前正在播放片段的循环数。浮动部分表示该剪辑中的标准化时间(我认为0.0f
是开始,1.0f
是结束(。例如,0.0和1.0之间的任何值都表示播放第一个循环,1.0和2.0之间表示播放第二个循环,依此类推
我现在的问题是,当normalizedTime
正是1.0
时,情况是什么?然后整数部分是1(表示剪辑已经循环了一次,我们现在处于第二次迭代中(,浮动部分是0,这意味着它是剪辑的第一帧。但同时,normalizedTime
值为1.0应该意味着我们处于片段循环之前的最后一帧。
对于完美循环的剪辑,这可能没有问题。但是如果剪辑不是一个循环呢?我如何检测到我现在处于最后一帧?理论上,normalizedTime
应该是0.99999999999999999999f
。
这是正确的吗?如何解读normalizedTime == 1.0f
?
我自己发现了。如果";循环时间";的,则任何normalizedTime>=1.0属于第二个(或第三个…(循环。非常接近1.0的偶数(如0.9999999(属于第二帧。这意味着,当你真正期待最后一帧时,你可能会得到剪辑的第一帧。
normalizedTime似乎没有任何值可以保证最后一帧。