您的位置:首页 > 移动开发 > Unity3D

关于 root motion

2016-08-12 10:40 211 查看
google了下,没找到root motion这种技术的出处在哪,unity上有此功能,ue4也有,真想知道是谁想出来这么返璞归真的想法:用动画的位移来控制人物的位移,让滑步狗带。

相信看到这里的人,应该是知道root motion是什么,已经自己遇到了什么样的困惑,我就不赘述了,直入正题,说一下我的理解。

这篇文章很详细,但个人觉得还是不是很透彻,而且细节有些不对。
http://blog.csdn.net/cubesky/article/details/39478207
这是我的个人理解,从程序员的角度看下:

(因为没有源码,官方文档也不多,只能从表象猜测了)

当你制作动画时,一定离不开一棵骨骼树,然后调整某个骨骼,做出相应动作(举手,抬腿)。但当你想要让整体移动时(比如助跑,跳跃),这时候你就要移动根节点骨骼了,[b]这就是ROOT MOTION 中 ROOT的由来??

(当然你也可以不移动根节点,只是摆出原地的动作,后续在游戏里,用程序实现人物整体移动的轨迹,当然,然后你就滑步了)[/b]

而root motion就是在这个根节点骨骼上做文章。如果你设置为“Bake into Pose”,那么这个根节点骨骼的移动,会加在所有子骨骼的位移上,这时候Root Motion的移动就是0.

如果不勾选“Bake into Pose”,那么根骨骼的位移,就不会加在子骨骼的位移上。这时候Root Motion的值就是根节点骨骼的位移值。


最后,当你勾选Apply Root Motion时,之前的那个值就起作用了,如果root motion为0,那么不会设置你人物的transform(自然就不会影响你的物理计算结果)。如果不为0,那么就是直接设置你人物的transform,物理就不起作用了。

而unity官方api,把水平(XZ)和垂直(Y)分开了,这样就解决很多问题了:如果你是奔跑动作,那么就不勾选XZ,让值影响你的水平位移,但勾选Y,让Y上的root motion bake 到你的子骨骼中,让物理重力依旧影响你的人物。如果你是跳跃运动,那么就不勾选XZ,让值影响你的水平位移,让你能跳出去,同时也不勾选Y,让值影响你的Y,让你的人物忽略掉重力,高高跳起,直到动画播完,切回到idle或run,你的人物就会从半空中摔下来。what a beautiful workflow
~


抛砖引玉,请评论对错。谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息