在Unity3D动画中,模型的位置、角度经常会发生变化,我们需要决定是否将模型在动画中发生的这些变换化用到实际模型(GameObject)中。
在Untiy3D中将动画中的变换分成两类:
1) Body Transform (pose:姿势)
2) Root Transform (trajectory:轨迹)
我们可以设置动画中的关于模型的一些变换(平移、旋转等)是属于Body Transform(pose)还是Root Transform(trajectory)的一部分。
举例如下(ac001为角色跑步):
在上图中:
1) 如果【Apply Root Motion】未选中:则角色在原地跑步,且Transform中的值没有任何变化
2) 如果【Apply Root Motion】已选中:则角色在场景中跑步,且Transform中的值跟随变化
根变换 (Root Transform) 是身体变换 (Body Transform) 在 Y 平面上的投影,在运行时计算。在每一帧,根变换 (Root Transform) 中的变化都会计算出来。然后变换的变化会被应用到游戏对象 (Game Object) 上,使之移动。
角色下面的圆表示根变换(Root Transform)
Bake Into Pose:也就是将变换设置为Body Transform(pose)的一部分。
如果把变换设置成Body Transform(pose)的一部分,就相当这些变换是属于动画本身的一部分,即无论是否设置Apply Root Motion,在场景中,我们都会看到模型位置或角度的变化。因为Body Transform不影响模型(GameObject)实际的位置和角度,所以这里只是纯粹的动画效果,模型(GameObject)的位置和角度参数值不变
如果设置成Root Transform,Root Transform将影响模型(GameObject)的实际位置和角度(前提是要设置“Apply Root Motion”,如果不设置Apply Root Motion的话,也就是说变换将不应用,场景中的模型(GameObject)位置或角度是不会有变化的<Transform值自然也不变>,就像一个行走动画,可能一直在原地行走)。
Apply Root Motion作用如下:
1) 决定是否应用Root Transform:
如果勾选【Apply Root Motion】,则应用Root Transform在播放动画的同时,模型(GameObject)的位置和角度会同时跟着变化。如果不勾选【Apply Root Motion】,则不应用Root Transform,所有的Root Transform都将不起任何作用。即相当于所有没有Bake into Pose 的变换都不起作用了。
2) 在动画结束后,将Body Transform中的变化应用到模型:
这里是结束的时候才应用,也就是说动画的时候,模型的(GameObject)position、rorate等参数是不变的,当动画结束之后,开始新的动画之前才会改变,注意这里跟前面提到的Root Transform的区别
下面以一个人物行走的动画为例,分析以下几种情况(这里以“Root transform position(XZ)为例)
1) 勾选【Bake into Pose】,不勾选【Apply Root Motion】
勾选”Bake into Pose"后,变换属于Body Transform,所以即使这里未勾选”Apply Root Motion“,但是动画依然会在场景中体现,人物会按照动画的路径行走(但是如果我们观察Inspector中模型的Transform,其值一直不变)。这是因为没有勾选Apply Root Motion,所以动画结束后,变换不会应用到模型;此时,如果开始一个新的动画,模型会瞬间回到起始位置(新的动画开始时候,模型处于行走动画开始时的位置)。
2) 勾选【Bake into Pose】,并勾选【Apply Root Motion】
这里跟上面的情况唯一不同的是,动画结束后,开始新的动画之前,变换会应用到模型。(模型的Transform在新的动画开始之前会发生变化,新的动画开始时候,模型处于上个动画结束时的位置)
3) 不勾选【Bake into Pose】,勾选【Apply Root Motion】
不勾选“Bake into Pose”后,变换属于Root Transform,且勾选了Apply Root Motion,变换会应用到模型(模型的Transform跟着动画不停的变化),自然,新的动画开始时候,模型处于上个动画结束时的位置。
4) 不勾选【Bake into Pose】,不勾选【Apply Root Motion】
这里变换还是属于Root Transform,但是因为没有勾选Apply Root Motion,所以变换将不被应用,所以模型将一直在本地不动,自然,新的动画开始时候,模型处于行走动画开始时的位置
动画片段编辑器 (Animation Clip Editor) 设置(根变换旋转 (Root Transform Rotation)、根变换位置 (Root Transform Position)(Y) 和根变换位置 (XZ))让您从身体变换 (Body Transform) 控制根变换 (Root Transform) 投影。根据这些设置,身体变换 (Body Transform) 的某些部分可能会传输到根变换 (Root Transform)。
例如,您可以决定是否要让运动 Y 位置成为根运动 (Root Motion)(轨迹)一部分,或者姿势(身体变换<Body Transform>)的一部分,这就是所谓的烘焙为姿势 (Bake into Pose)。( For example you can decide if you want the motion Y position to be part of the Root Motion (trajectory) or part of the pose (body transform), which is known as Baked into Pose.)
只有拥有类似启停根方向 (Root Orientation) 的 AnimationClip 才会使用该选项。您会在 UI 看到绿灯 (Green Light),告知您某个 AnimationClip 是好的候选片段。合适的候选片段应当是直走或跑步动画。
基于 (Based Upon):该选项允许您设置片段的方向。片段使用身体方向 (Body Orientation) 定向,以循着身体的向前向量。该默认设置适用于大多数动作捕捉 (Motion Capture)(动态捕捉 (Mocap))数据,比如走路、跑步、跳跃,但不能用于扫射之类的动作,这些动作与身体的向前向量垂直。在这种情况下,可以使用偏移(Offset) 设置手动调整方向。最后,您会在导入的片段中找到自动添加授权位移的原始方向 (Original)。它常常与键帧 (Keyframed) 数据配合使用,以遵循美工设置的方向。
偏移 (Offset):为基于 (Based Upon) 选择该项时用来输入偏移量。
烘焙为姿势 (Bake Into Pose): 将用于空闲 (Idles),在这种情况下您希望将增量位置 (Position) (XZ) 强制改成 0。在多次评估之后,它会停止累计增量变化。它也可用于具有基于 (Based Upon)原始方向 (Original) 的关键帧片段,以强制更改美工设置的授权位置。