状态行为(State Behaviors)
本文档的编写假设你对 Unity Animator 有一定了解。
当你在 Animator 视图中选中某个特定状态时, 你可以添加状态行为。它们有点像状态的组件,具有不同的功能。试着添加它们,你就会看到它们能做什么!
所有状态行为都在过渡到该状态的第一帧运行。
状态行为应该无论状态机在包含该状态行为的狀態中停留多久都会运行。
这里特意使用了"应该"一词,因为 Unity 文档 中并未定义在过渡或状态持续时间非常短的情况下,状态行为一定会执行。
如果你想要完全安全,请确保在包含状态行为的状态以及直接过渡到该状态的总时间至少为 0.02 秒——尽管在实践中,这似乎不是必需的。
动画器层控制器(Animator Layer Controller)

Animator Layer Control 允许你在任 意给定的可播放层中,在任意给定时间内混合特定动画器层的权重。
如果在混合持续时间内退出了该状态,目标层将立即设置为目标权重。
层权重将保持不变,直到其他某个状态再次运行此状态行为并将其重置。
| 属性名 | 用途 |
|---|---|
| Playable | 允许你选择要影响的可播放层。 |
| Layer | 你要影响的可播放层的索引。你不能更改第 0 层(基础层)的权重——它始终设置为 1.0 权重。 |
| Goal Weight | 定义你想要混合到的权重。 |
| Blend Duration | 定义混合所需的时间(以秒为单位)。0 表示立即完成。 |
| Debug String | 当此状态行为运行时,此字符串将打印到输出日志。用于调试。 |
动画器移动控制(Animator Locomotion Control)
Animator Locomotion Control 允许你在动画器的特定状态中禁用移动。移动状态将保持不变,直到其他某个状态再次运行此状态行为并更改它。
在桌面模式下,此功能禁用平移运动,并将旋转(视角)运动限制在垂直轴上。在 VR 中,此功能禁用平移和旋转控制器运动,并限制半身 IK(全身 IK 不受影响)。在两种模式下,玩家的碰撞体都会被固定在原地。
| 参数 | 描述 |
|---|---|
| Disable Locomotion | 如果设置为 True,移动(使用控制器移动)将被禁用。房间尺度移动仍然可能。如果设置为 False,将启用移动。 |
| Debug String | 当此状态行为运行时,此字符串将打印到输出日志。用于调试。 |
动画器临时姿势空间(Animator Temporary Pose Space)

Animator Temporary Pose Space 控制允许你将穿戴虚拟形象的人的视角移动到动画器状态该特定点的头部位置。
视角将保持不变,直到其他某个状态再次运行此状态行为并将其重置或清除。
此行为在延迟时间过后执行。
Animator Temporary Pose Space 只应在由于姿势变化(如坐下或躺在地面上)需要更新视角高度时使用。它不能用于"缩放"穿戴的虚拟形象,如果以这种方式使用,将导致严重的破坏性问题。
如果此状态行为所在的状态在 Delay Time 过去之前被退出或中断,该状态行为将不会执行!
| 属性名 | 用途 |
|---|---|
| Pose Space | 进入或退出。Enter 设置姿势空间,exit 将其清除为默认值。 |
| Fixed Delay | 延迟时间应该是固定时间段,还是状态持续时间的百分比? |
| Delay Time | 如果给定一个值,视角将在延迟后设置。如果你正在一定时间内混合进入一个动画,这很有用。 |
| Debug String | 当此状态行为运行时,此字符串将打印到输出日志。用于调试。 |
动画器追踪控制(Animator Tracking Control)
![]()
Animator Tracking Control 允许你在虚拟形象身体的不同部位启用或禁用 IK 或模拟运动。将选项设置为"No Change"将不会改变该身体部位的当前值。"Tracking"将使其跟随 IK 或模拟运动。"Animation"将强制该身体部位遵循虚拟形象动画器给出的值。
如果你将所有 IK 追踪点设置为 Animation,你的动画将作为动画远程播放,而不是通过网络 IK 进行传输。对于各种追踪类型,这些"IK 追踪点"是:
- 桌面模式:头部、左手、右手
- 3 点追踪:头部、左手、右手
- 6 点 / FBT 追踪:头部、左手、右手、臀部、左脚、右脚
除眼睛和眼睑(它们是模拟的)外,所有部位都由 IK 驱动。嘴巴和下颌由 viseme 驱动。
例如,将左手和右手设置为 Animation 将忽略由 IK 定义的手部(和手臂)位置,而是使用任何当前活动状态的运动来定义手和手臂的位置。将它们设置回 Tracking 则将使用 IK。
将眼睛和眼睑设置为 Animation 将禁用眼部运动和眼睑眨眼。将眼睛和眼睑设置为 Tracking 将重新启用模拟眼部运动和眨眼。
将嘴巴和下颌设置为 Animation 将禁用 viseme,并且 viseme 参数将停止更新。将嘴巴和下颌设置为 Tracking 将重新启用 viseme,并且它们将再次开始更新。
追踪设置将保持不变,直到其他某个状态再次运行此状态行为并将其重置。
| 参数 | 描述 |
|---|---|
| Tracking Control | 参见上述描述。 |
| Debug String | 当此状态行为运行时,此字符串将打印到输出日志。用于调试。 |
虚拟形象参数驱动器(Avatar Parameter Driver)

Avatar Parameter Driver 可以通过多种方式操作动画器参数。单个虚拟形象参数驱动器可以执行多个操作,按从上到下的顺序进行。这些操作在进入行为所在的状态时一次性完成。
Local Only 将使驱动器仅在本地运行,作为检测 isLocal 的快捷方式。
点击 "Add" 将为驱动器添加一个新操作。第一个类型( 默认选中)是 "Set"。
如果修改同步参数(在 VRCExpressionParameters 对象中定义的任何内容),这些值将被限制在其最大范围内。Int [0,255] Float [-1,1]。
但是,仅在动画控制器中定义的参数(即"本地参数")仍然可以被参数驱动器修改。这些值不受限制。
你也不能驱动任何 VRChat 定义的动画器参数。
Set、Add、Random 和 Copy 适用于 float 和 int。Set、Random 和 Copy 适用于 bool。
Set(设置)
Set 会将值直接设置到目标中的命名参数。

Add(添加)
Add 会将值添加到目标中的命名参数。
正如组件所指出的,在虚拟形象的远程实例上运行时,使用 Add 可能不会产生相同的结果。使用 Add 时,建议使用同步的目标参数,并且只在本地运行驱动器。

Random(随机)
Random 会将目标参数设置为介于最小值和最大值之间的随机数。
正如组件所指出的,在虚拟形象的远程实例上运行时,使用 Random 可能不会产生相同的结果。使用 Random 时,建议使用同步的目标参数,并且只在本地运行驱动器。
当使用布尔参数时,你可以使用 Chance 变量来设置参数被设置为 true 的概率。
当使用 Int 参数时,你可以使用 Prevent Repeats 设置来防止连续两次选择相同的值。

Copy(复制)
Copy 会将源参数的值设置到目标参数。这可用于将一个 float 设置为匹配另一个 float,将一个 float 重新映射到不同的范围,或者完全在两种不同类型之间进行转换。
VRChat 的内置参数,例如 GestureLeftWeight,