Skip to main content

动画器(Animators)

动画器组件

动画器组件将您的动画控制器中的动画片段转换为角色上的实际变化。虽然您可以手动添加它,但 Unity 会自动将它放置在任何包含角色定义的 FBX 文件上。

要自动完成此操作:

  1. 打开模型检查器(Inspector)。
  2. 选择“从此模型创建”或“从其他角色复制”。
  3. 确保您的 FBX 文件具有人形(Humanoid)或通用(General)骨架。

image.png

动画器组件在游戏对象检查器(Inspector)中显示。

image.png

通过检查器(Inspector)中的“添加组件”按钮,您可以将动画器组件添加到任何游戏对象上。

使用动画器组件

动画器组件有一些使用上的小技巧:

动画片段的路径依据最近的父级动画器组件来决定。

对游戏对象进行动画处理时,属性的目标路径会省略根部动画器游戏对象。例如:

如果我们想让子对象相对于角色上的动画器进行动画处理,那么动画片段的路径应为:父对象/子对象

image.png

如果我们想让子对象相对于父级动画器进行动画处理,那么动画片段的路径应直接为:子对象

image.png

向动画窗口添加属性时,会根据最近的父级动画器组件添加属性路径。

动画器组件控制动画窗口

根据自身或其父级最近的动画器组件,动画窗口的内容会发生变化。

  1. 如果没有检测到动画器、动画控制器,或者您的动画控制器中没有包含任何动画片段,则动画窗口可能显示为空或没有可用的预览、录制和编辑功能。image.png
  2. 如果您从项目窗口中选择了一个动画片段,动画窗口将显示您所选择的动画片段,但预览(Preview)、录制(Record)和其他编辑功能将不可用,除非您在层级中选择了一个带有动画器的游戏对象。

    image.png

  3. 当您拥有一个动画器组件、一个动画控制器,并且该控制器中至少包含一个动画片段时,动画窗口将完全启用并提供所有功能。

    image.png

高级细节说明

组件字段

Animator 组件包含五个字段用于交互:

控制器(Controller)

Controller 字段中的 Animator 控制器,类似于动画系统的指挥官。它通过在不同时间使用动画片段、权重和遮罩来决定如何移动游戏对象及其子对象。

在VRChat头像中,Animator 的 Controller 字段不会使用。相反,它被 VRC Avatar Descriptor 中的可播放层组合所取代。这种变化不会影响子游戏对象上的 Animator;它们仍使用分配给它们的控制器。

虚拟形象(Avatar)

Avatar 字段提供了关于游戏对象及其子对象如何连接的更多信息。它可以用来创建 Animator 层遮罩,并在人体形骨骼组的情况下,可以在多个虚拟形象之间创建通用动画。Avatar 有四种类型:

  • 人体形:这是最受欢迎的 Avatar 类型,因为 VRChat 的默认动画依赖于这种 Avatar。它包含一份人体形骨骼列表,可将其映射到变换(游戏对象)。一旦这些骨骼被映射,你就可以使用人体形肌肉在动画中以可预测的方式移动 Avatar。这使得任何(VRChat)Avatar 都可以使用动画来控制人体形肌肉,只要它们的(Unity)Avatar 设置正确。
  • 通用:这种头像类似于人体形 Avatar,但不包含所有的人体形骨骼/肌肉。这种虚拟形象仅用于创建 Animator 层遮罩。
  • 旧版/无(Legacy/None):这些选项根本不创建 Avatar,因此和 Animator 组件无关。

更多详细信息请参阅虚拟形象骨骼组(Avatar Rigs)

应用根运动(Apply Root Motion)

根运动(Root Motion)是 Animator 组件的游戏对象变换的变化。当 Apply Root Motion 关闭时,任何对游戏对象变换的更改都会叠加到当前值上。

示例:

  • 如果不启用 Apply Root Motion,如果游戏对象的位置是 (1,0,-1),并且你将 Transform.Position 动画设置为 (1,1,1),那么变换将被动画化为 (1,1,1)
  • 如果启用 Apply Root Motion,则会设置为 (2,1,0)

注意:如果你有一个人体形骨骼组,并且使用一个动画来动画“根”人体形肌肉,你可以在动画片段检查器中调整其他设置来决定哪些部分的根运动被动画化以及如何进行。

在VRChat头像的Animator组件中,Apply Root Motion 设置默认加载时为“正常”。子游戏对象上的Animator不受影响。

更新模式(Update Mode)

Update Mode 决定了 Animator 组件何时更新其逻辑。有三种模式:

  • 正常(Normal):每帧更新一次。时间取决于帧率,因为我们无法直接访问帧时间。
  • 物理(Physics):每物理帧更新一次,这发生在每秒固定次数。这种方法不受帧率影响,因此是帧率无关的。
  • 未缩放时间(Unscaled Time):每帧更新一次,但忽略时间缩放。在VRChat中,这与正常相同,因为时间缩放不会改变。

在VRChat头像的Animator上,加载时默认设置为“正常”模式。子游戏对象上的 Animator 不受影响。

剔除模式(Culling Mode)

Culling Mode 决定了 Animator 组件的所有网格都离屏或禁用时发生的状况。有三种模式:

  • 始终动画(Always Animate):即使离屏时也保持整个头像动画化。
  • 剔除更新变换(Cull Update Transforms):当渲染器不可见时禁用变换值的变化。这包括启用或禁用游戏对象和组件,以及更改混合形状。例外情况是动画化动画参数(AAP)和触发状态机行为。
  • 完全剔除(Cull Completely):当渲染器不可见时冻结整个Animator。不处理逻辑,不检查过渡,不进行动画。

在 VRChat 中,本地 虚拟形象 的 Animator 设置为始终动画化,而远程虚拟形象的 Animator 设置为剔除更新变换。子游戏对象上的 Animator 不受此影响。