|
|
最近尝试实现角色动画。使用AnimationState的混合来做不同动画之间的过渡。
目前的方法是为一个人物保存一个目标动画状态的列表。动画更新的时候检查这个表中的所有元素,从表首到表尾的每个动画状态都对应一个权值,权值分配方法如下:
(w0 + w1) = 1
(w0 + w1)*(1 - w2) + w2 = 1
((w0 + w1)*(1 - w2) + w2)*(1 - w3) + w3 = 1
...
(其中w0, w1, w2, w3 .....分别代表表中动画状态的权值,由此可见越靠表尾的动画所占比重增长越快,可以看作是优先级高)
我之所以这样允许3个或3个以上的动画同时混合,就是怕出现当前混合过程中出现新动画参与混合后,之前还没混合结束的动画就丢失了,也就是出现不平滑的“动作突变”。(举个例子:对人物从站立到行走的过渡中突然又奔跑起来。如果舍弃站立或者行走的动画,都会导致一瞬间出现人物突然一哆嗦的现象)
但是这种做法会有错误,即表中不能出现相同的动画状态:还是人物从站立到行走的例子(假设用户按下方向键人物开始行走,松开按键后人物就停下来),如果在开始行走的过渡中用户松开按钮,人物就又放弃行走,又趋向于站立过渡。那么在松开按钮的时候,列表中新加入的节点和表首节点中的动画状态是同一个AnimationState。这样的话表中的3个状态有两个是一样的,这就与之前的权值计算冲突了。也就是说w0和w2是同一个值的。这肯定是不对的。
我现在这些问题都解决不了,已经陷入僵局,就想参考参考别人做的这方面的程序,看看应该用什么方法做人物的动画,能够使所有动作之间的过渡都是平滑无缝的。先谢谢了。 |
|