一个 状态机 将动画节点组合成命名状态,例如 Idle(闲置)、Walk(行走)、Run(奔跑)和 Jump(跳跃)。它播放活动状态,并在过渡条件评估为 true 时混合到另一个状态。使用状态机来定义哪些动画可以相互跟随,而无需在 Luau 中编写过渡逻辑。
每个状态连接到状态机上的一个输入。一个状态可以是一个剪辑、一个混合节点或另一个状态机。状态机输出活动动画姿势,或者在过渡时输出两个姿势之间的混合,您将其连接到图中的下一个节点。
前提条件
在创建状态机之前,请熟悉 动画图形编辑器,包括如何 打开它并创建动画图。
创建状态机
以下示例使用 JumpFallLandRunExample 中的三个状态:Locomotion(运动)、Fall(下落)和 LandIdle(着陆闲置)。角色正常移动,当空中时切换到下落动画,并在返回运动之前播放着陆动画。这些步骤侧重于状态机;首先使用运动、下落和着陆的动画节点。
在 图形编辑器 中,右键单击并选择 插入节点 ⟩ 状态机。

在状态机节点上,单击 打开。在 状态机 视图中,使用 创建状态 添加三个名为 Locomotion、Fall 和 LandIdle 的状态。

单击 返回图形 并将您的动画节点连接到相应的状态机输入:
- LandIdle:连接一个着陆剪辑,并将 播放模式 设置为 Enum.AnimationNodePlayMode|OnceAndHold,以便它可以完成并过渡回运动。
将状态机输出连接到 图形输出 的 姿势 输入。

再次打开 状态机 视图,并从 (入口) 拖动一个过渡到 Locomotion。当图形开始时,状态机在此状态中启动。

添加一个名为 Grounded 的布尔图参数并将其设置为 true。该参数指示角色是否在地面上。
通过从源状态拖动连接到目标状态添加以下过渡,然后配置每个过渡:
- Fall 到 LandIdle:将 等待 设置为 表达式,表达式 设置为 Grounded,并将 长度 设置为 0.1 秒。角色接触地面时开始着陆动画。
- LandIdle 到 Locomotion:将 等待 设置为 完成,何时 设置为 Enum.AnimationNodeTransitionWhen|BeforeFinished,并将 长度 设置为 0.2 秒。状态机在着陆动画的最后 0.2 秒开始混合回运动。

将所有三个过渡的 曲线 保持为默认值 (Linear)。预览图形并将 Grounded 更改为 false 以进入 Fall,然后再改回 true 以播放 LandIdle 并返回 Locomotion。
在角色离开和接触地面时,从您的游戏代码更新 Grounded。如果您的运动混合使用 Speed,则在角色移动时更新该参数。有关参数工作流,请参见 API 集成。
扩展状态机以添加跳跃和额外的着陆状态,以创建完整的移动图。JumpFallLandRunExample 包括站立和奔跑的单独跳跃,以及基于移动和下落速度的不同着陆。
状态机属性
状态机节点属性
- 输入
- State1...StateN:定义每个状态的动画节点。状态的名称必须与状态机节点的输入名称匹配。
- 属性
属性 类型 描述 EntryState ObjectValue 一个 ObjectValue,其 Value 指向图形开始时处于活动状态的 AnimationNodeDefinition。 - 事件数据
- 事件处理: 来自活动状态的事件以其权重不变地传递。
- 事件发射: 仅传递来自活动状态的事件。在过渡期间,事件发射遵循 全局事件规则。
过渡属性
一个过渡有一个或多个源状态、一个目标状态和一个条件。当活动状态匹配源状态时,状态机检查条件。当条件评估为 true 时,它混合到目标状态。
等待 确定过渡条件 UI。选择 表达式 (Enum.AnimationNodeWaitFor|Trigger) 以显示 表达式 框。表达式 可以直接引用布尔图参数,例如 ShouldJump,或评估条件,例如 Speed >= 12。选择 完成 (Enum.AnimationNodeWaitFor|Finished) 以显示 何时 下拉菜单。
如果多个过渡的 表达式 为真,状态机首先评估具有最高 优先级 值的过渡。当优先级相同时,它随机选择一个过渡。为竞争过渡分配不同的优先级,以使结果可预测。
| 属性 | 类型 | 描述 |
|---|---|---|
| From | ObjectValue | 一个 ObjectValue,其 Value 指向可以开始过渡的状态的 AnimationNodeDefinition。对于 (任意) 过渡,请保持此属性未设置。 |
| To | ObjectValue | 一个 ObjectValue,其 Value 指向目标状态的 AnimationNodeDefinition。 |
| WaitFor | Enum.AnimationNodeWaitFor | 确定显示哪个过渡条件 UI。Enum.AnimationNodeWaitFor|Trigger 显示 表达式 框。Enum.AnimationNodeWaitFor|Finished 显示 何时 下拉菜单。 |
| When | Enum.AnimationNodeTransitionWhen | 当 等待 为 完成 时可用。选择 Enum.AnimationNodeTransitionWhen|Finished 以在源状态完成后开始,或选择 Enum.AnimationNodeTransitionWhen|BeforeFinished 以在源状态完成前一个 持续时间 开始混合。 |
| Expression | 字符串 | 当 等待 为 表达式 时可用。一个布尔图参数或表达式,当其评估为 true 时,开始过渡。有关支持的内容,请参见 表达式。 |
| Priority | 数字 | 当多个 表达式 为真时使用的顺序。较高的值优先。有效值范围为 0 到 65,535。 |
| Duration | 数字 | 以秒为单位的时间,用于混合到目标状态。默认值为 0.15 秒。 |
| Curve | Enum.PoseEasingStyle | 在混合过程中使用的缓动。仅支持 Linear 和 CubicV2。默认值为 Linear。 |