版本:Unity 6 (6000.0)
语言:英语
根运动的工作原理
Animator 组件

脚本控制根运动

有时你的动画是“原地”动画,这意味着如果你将其放置在场景场景包含游戏中的环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,你放置环境、障碍物和装饰物,从本质上讲,就是分块设计和构建你的游戏。 更多信息
参见 术语表
中,它不会移动其所在的角色。换句话说,动画不包含“根运动角色根节点的运动,无论是由动画本身还是外部控制。 更多信息
参见 术语表
”。为此,我们可以通过脚本修改根运动。为了将所有内容整合在一起,请按照以下步骤操作(请注意,实现相同结果的方法有很多种,这只是一个示例)。

  • 打开包含原地动画的 FBX 文件的检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许你检查和编辑值。 更多信息
    参见 术语表
    ,然后转到“动画”选项卡
  • 确保肌肉定义这允许你对角色的骨骼进行更直观的控制。当角色出现时,动画系统在肌肉空间中工作,这比骨骼空间更直观。 更多信息
    参见 术语表
    设置为你要控制的角色用于将动画从一个骨骼绑定重新定位到另一个骨骼绑定的接口。 更多信息
    参见 术语表
    (假设此角色称为“Dude”,并且已添加到“层级视图”中)。
  • 从可用剪辑中选择动画剪辑可用于动画角色或简单动画的动画数据。它是一个简单的“单元”运动,例如(一个特定的实例)“空闲”、“行走”或“跑步”。 更多信息
    参见 术语表
  • 确保循环姿势动画剪辑设置,混合动画的结束和开始以创建无缝连接。 更多信息
    参见 术语表
    正确对齐(旁边的灯为绿色),并且已选中“循环姿势”复选框
  • 在动画查看器中预览动画,以确保动画的开始和结束平滑对齐,并且角色正在“原地”移动
  • 在动画剪辑中创建曲线来控制角色的速度(你可以从“动画导入检查器”的“曲线”->“+”添加曲线)
  • 将该曲线命名为有意义的名称,例如“Runspeed”
  • 创建一个新的动画控制器通过带有动画状态机和动画混合树的动画层控制动画,由动画参数控制。同一个动画控制器可以被具有 Animator 组件的多个模型引用。 更多信息
    参见 术语表
    (将其命名为“RootMotionController”)
  • 将所需的动画剪辑拖放到其中,这将创建一个与动画名称相同的状态(例如“Run”)
  • 向控制器添加一个与曲线名称相同的参数(在本例中为“Runspeed”)
  • 在“层级”中选择角色“Dude”,其检查器中应该已经存在一个“Animator”组件。
  • 将“RootMotionController”拖到 Animator 的“控制器”属性上
  • 如果你现在按下播放,你应该会看到“Dude”原地跑步

最后,为了控制运动,我们需要创建一个脚本(RootMotionScript.cs),它实现了OnAnimatorMove 回调:-

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Animator))]

public class RootMotionScript : MonoBehaviour {

    void OnAnimatorMove()
    {
            Animator animator = GetComponent<Animator>();

            if (animator)
            {
     Vector3 newPosition = transform.position;
               newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;
     transform.position = newPosition;
            }
    }
}

你应该将 RootMotionScript.cs 附加到“Dude”对象上。当你这样做时,Animator 组件模型上的一个组件,使用动画系统对该模型进行动画处理。该组件引用一个控制动画的 Animator Controller 资源。 更多信息
参见 术语表
将检测到该脚本具有OnAnimatorMove 函数,并将“应用根运动”属性显示为“由脚本处理”

根运动的工作原理
Animator 组件