第七十讲 Mecanim 使用:Mecanim Root Motion 应在上节小我们介绍通过Root Motion直接使用角色的动画来驱动角色在场景中的 运动,这相当于在游戏中直接来使用角色的动画片段而在unity Mecanim动画 片段的属性中也提供了和应的选项來控制如何在游戏直接使用运动片段,更进一 步就是控制角色片段中Rool Motion产生的方式例如我们在看一个跑循环的动画片段Import Animation回Bake Animatic1-^1 : RunQ a■id Source TakeRun$Length 0.56530 FPS1 ipOiiq P|10:2C||ll:00(lll:20lEndStart301.(318.Cloop matchLoop Pose此时我们选中Run的循环动ifflj, K属性编辑器中会出现一些选项,使用这些选项 可以控制角色动画中Root Motion的产生,而且对于这些选项可以让用户根据对 于动画片段的类型来选择合适的设置以帮助unity的Mecanim更好的产生Rool Motion数据当然Mecanim也提供了一些方式,來判断动画片段的类型以及循 环是否匹配等。
例如在游戏中可以包含有多种类型的动画,跑循环的动画、走循 环的动画、以及空闲保持原地不动的动画对于这些动画我们可以使用此处的选 项來影响Root Motion的产生,來影响角色在游戏中的运动方式Cycle Offset0Root Transform Rotation Bake into PoseBased Upon (at Start) Offset[Vf loop match| Body Orientation < j0loop match QLoop PoseRoot Transform Rotation主耍是控制角色的旋转也就是控制游戏在场景中是否 会产生旋转的效果Root Transform PotationBake into PoseBased UponOffsetRoot Transform PositionBake into PoseBased Upon (at Start)OffsetBody Orientationloop matchOriginal o-选择动画片段选项,当我们导入的动画片段中角色是如何进行旋转的当其应用 到游戏中时也是原样的进行选择或者选择Body Orientation上下半身的方向相 对于T-posc的方向由Mccanim 口动创建出一个向前的矢量,來根据矢量的情况 自动判断角色是否进行旋转。
但更加智能的是Mecanim判断动1師循环的匹配情况,也就是动1厠范围内的开始帧 以及结束帧中,如果角色的旋转保持恒定,旋转角度是相同的保持同一姿势时 路灯就会显示循环的质量非常好选中Bake into Pose项,选中此项后我们可以直接使用角色中的开始时的旋转 值来决定角色在此运动时是否进行旋转Root Transform Rotation选中此项后角色在整个循环的运动过程中,保持恒定的旋转量,也就是角色的整 个身体不进行旋转对于这种动画类型,如跑的动画类型、以及走的动画类型, 角色一般不进行整体的旋转对于此种类型的动画片段,一般就选中Bake into Pose由于动闹中的角色不 是进行旋转的因此在应用到游戏中的角色中时,则游戏中的角色也不会进行旋转Root Transform Position (Y)Bake into Pose p loop match QBased Upon (at Start) Original $Offset 0Root Transform Position (Y)主要是设置Root Mot io n中沿y轴方向的运动, 主要控制角色上下的运动,与Root Transform Position类似我们可以使原始动 画中的角色y方向上的运动也口J以使角色重心以及根据角色的脚步的位置來计 算在y方向的运动。
对于Free选项主要应用在当Root Transform Position(Y)关闭时Mecanim会选 用角色在所有帧中最低的点作为角色高度的计算标准使用此高度运用在所有动 作的融合过渡计算中以此来防止在融合以及过渡过程中角色的脚步出现高度突 然变化或抖动的不正常效果而对于重心项,在此项选择后会移动到重心位置处 因此在某些特殊的位置卜•我们不会使用此项,而更进一步的如杲角色的片段中貝 冇良好的y方向的循环匹配,在整个帧的动闹范围内角色的整体高度没冇发生变 化例如对于人部分的动作循环、走的动画循环片段角色的整体高度变化,在开始或结束时的高 度变化是相同的具有很好的循环匹配性此时的灯会显示为绿色,一般都会选择Bake into Pose直接使用角色动训中的高度来作为Root Motion的高度,这也意味着当使 用了此项后我们的角色动画在应用到场景的游戏物体中后游戏物体在播放此动 画吋其整体高度也是不会发生变化的大部分动画片段我们都会选中此项,除非对于角色的高度发生变化的动画如角色 跳起或下落动画类型的片段,此时在y方向不会冇很好的循环匹配角色在高度 发生变化的片段都不会选中此项而对于Offset选项可以手动调节角色在y方向 的高度。
Bake into Pose叼 loop match ©Based Upon (at Start)Original $ ]Offset对于Root Transform Position (XZ)也就是设置角色动lUlj在XZ平面上的位置 此项与上面的两项类似我们可以使用原始XZ角色的位置也可以使用角色的重心Root Transform Position (XZ)Bake into Pose□loop matchBased UponI Original、V 1Mirror□Average Velocit/: (-0.043. 0.000. 5.299)1 Average Angular Y Speed: 0.0 deg./sRoot Motion中XZ的位置重心在y轴平面上的投影位置,Bake into Pose选项 我们直接使用角色姿势中XZ位置,对于此跑动循环动画的例子,由于其角色在 整个动画片段范围内其XZ位置是不断发生变化的,动画在开始帧中X位置在此 处而在结束时X位置口J能在不同的位置此时我们直接使用角色姿势中的位置就 显得不合适了,因此在此跑动循环的动画片段的例了中此项我们是不选中的,那 么对于哪些动画片段我们选中此项呢? 例如Idol动画类型的动画片段其XZ位置在整个动画的过程中是基本上是不动的,循 环匹配项的颜色也会显示为绿色。
此时可以选择Bake into Pose选项而对于 X位置不断变化的选项我们不适合选择Cycle OffsetRoot Transform PotationBake into PoseBased Upon (at Start)Offsetloop matchBody Orientation"dloop matchBased Upon (at Start)| Original•■Offset0Root Transform Position (XZ)Bake into Pose□ Kloop matchBased Upon、Original 比•■ JRoot Transform Position (Y)Bake into PoseMiirorAverage Velociff: (-0.043 0»000 5.299)Average Angular Y Speed: 0.0 deg sBody MaskTransfoiTn MaskCurvesRevert对于Bake into Pose项的选择我们可以掌握这样一个原则,此吋的绿灯为绿色吋 我们都可以选中此项,这样就口J以产生很好的Root Motion设置。
放我们对所冇 的选项设置好2后,我们就可以点击Apply按钮确定最终的Root Motion动画方 式。