Unity之动画文件的设置与Apply Root Motion

发表于2018-02-28
评论0 8.9k浏览
在很多动画当中,模型的位置、角度往往会发生变化,我们需要决定是否将模型再动画中发生的这些变换应用到实际模型,而其中就有一个跟Apply Root Motion有关系。


1、这是一个跑的动画,但因为其设置的原因,导致动画循环之后,发生了旋转。而这不是我想要的,那么解决办法是:
勾选Bake Into Pose,即角色的身体基本上不进行旋转。比如跑和走的动画,身体是不发生较大旋转的。右边的灯是各个方位的匹配程度。

2、具体的效果如下(我的这个动画是人物进行前空翻的动画):Root Transform Position(XZ)的Bake Into Pose没有勾选,表示人物前空翻时,主体GameObject会向前移动,如果勾选则GameObject在XZ平面则不会移动。同理,Root Transform Position(Y)勾选表示GameObject在Y轴不移动,如果不勾选,则跟随摄像机会产生抖动,因为目标GameObject在Y轴也出现了跳跃时移动。

3、在animator中勾选Apply Root Motion这个选项,动画就会发生实际的位移,而不是原地踏步。但一个人物有不同的动画,需要与地面交互的方式也是不同的。可以通过对每一个动画进行不同的设置。Root Motion也是可以自定义的,使用回调函数:
void OnAnimatorMove() {  
       Animator animator = GetComponent<Animator>();  
       if (animator) {  
           Vector3 newPosition = transform.position;  
           newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;  
           transform.position = newPosition;  
       }  
   }  

加了此脚本后,animator面板变为:
打勾选项消失。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引