图形编辑器状态机

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处。

一个 状态机 将动画节点组合成命名状态,例如 Idle(闲置)、Walk(行走)、Run(奔跑)和 Jump(跳跃)。它播放活动状态,并在过渡条件评估为 true 时混合到另一个状态。使用状态机来定义哪些动画可以相互跟随,而无需在 Luau 中编写过渡逻辑。

每个状态连接到状态机上的一个输入。一个状态可以是一个剪辑、一个混合节点或另一个状态机。状态机输出活动动画姿势,或者在过渡时输出两个姿势之间的混合,您将其连接到图中的下一个节点。

前提条件

在创建状态机之前,请熟悉 动画图形编辑器,包括如何 打开它并创建动画图。

创建状态机

以下示例使用 JumpFallLandRunExample 中的三个状态:Locomotion(运动)、Fall(下落)和 LandIdle(着陆闲置)。角色正常移动,当空中时切换到下落动画,并在返回运动之前播放着陆动画。这些步骤侧重于状态机;首先使用运动、下落和着陆的动画节点。

  1. 在 图形编辑器 中,右键单击并选择 插入节点 ⟩ 状态机。

    图形编辑器上下文菜单,插入节点子菜单打开并选择状态机。
  2. 在状态机节点上,单击 打开。在 状态机 视图中,使用 创建状态 添加三个名为 Locomotion、Fall 和 LandIdle 的状态。

    状态机视图,显示创建状态按钮以及入口和任意状态节点。
  3. 单击 返回图形 并将您的动画节点连接到相应的状态机输入:

    • Locomotion:连接您的运动动画。参考图使用一个名为 IdleRunBlend 的 Blend1DNode 来根据 Speed 混合闲置和奔跑动画。
    • Fall:连接一个下落的 ClipNode,并将 播放模式 设置为 Enum.AnimationNodePlayMode|OnceAndHold,以便在角色着陆之前保持其最终姿势。
    • LandIdle:连接一个着陆剪辑,并将 播放模式 设置为 Enum.AnimationNodePlayMode|OnceAndHold,以便它可以完成并过渡回运动。

    将状态机输出连接到 图形输出 的 姿势 输入。

    IdleRunBlend、Fall 和 LandIdle 节点连接到状态机节点的 Locomotion、Fall 和 LandIdle 输入,其输出连接到图形输出。
  4. 再次打开 状态机 视图,并从 (入口) 拖动一个过渡到 Locomotion。当图形开始时,状态机在此状态中启动。

    入口节点连接到 Locomotion 状态。
  5. 添加一个名为 Grounded 的布尔图参数并将其设置为 true。该参数指示角色是否在地面上。

  6. 通过从源状态拖动连接到目标状态添加以下过渡,然后配置每个过渡:

    • Locomotion 到 Fall:将 等待 设置为 表达式,表达式 设置为 not Grounded,并将 长度 设置为 0.2 秒。角色离开地面时开始下落动画。
    • Fall 到 LandIdle:将 等待 设置为 表达式,表达式 设置为 Grounded,并将 长度 设置为 0.1 秒。角色接触地面时开始着陆动画。
    • LandIdle 到 Locomotion:将 等待 设置为 完成,何时 设置为 Enum.AnimationNodeTransitionWhen|BeforeFinished,并将 长度 设置为 0.2 秒。状态机在着陆动画的最后 0.2 秒开始混合回运动。
    从 LandIdle 到 Locomotion 的过渡设置,长度设置为 0.2,曲线设置为线性,等待设置为完成,何时设置为完成之前。
  7. 将所有三个过渡的 曲线 保持为默认值 (Linear)。预览图形并将 Grounded 更改为 false 以进入 Fall,然后再改回 true 以播放 LandIdle 并返回 Locomotion。

  8. 在角色离开和接触地面时,从您的游戏代码更新 Grounded。如果您的运动混合使用 Speed,则在角色移动时更新该参数。有关参数工作流,请参见 API 集成。

  9. 扩展状态机以添加跳跃和额外的着陆状态,以创建完整的移动图。JumpFallLandRunExample 包括站立和奔跑的单独跳跃,以及基于移动和下落速度的不同着陆。

状态机属性

状态机节点属性

输入
  • State1...StateN:定义每个状态的动画节点。状态的名称必须与状态机节点的输入名称匹配。
属性
属性类型描述
EntryStateObjectValue一个 ObjectValue,其 Value 指向图形开始时处于活动状态的 AnimationNodeDefinition。
事件数据
  • 事件处理: 来自活动状态的事件以其权重不变地传递。
  • 事件发射: 仅传递来自活动状态的事件。在过渡期间,事件发射遵循 全局事件规则。

过渡属性

一个过渡有一个或多个源状态、一个目标状态和一个条件。当活动状态匹配源状态时,状态机检查条件。当条件评估为 true 时,它混合到目标状态。

等待 确定过渡条件 UI。选择 表达式 (Enum.AnimationNodeWaitFor|Trigger) 以显示 表达式 框。表达式 可以直接引用布尔图参数,例如 ShouldJump,或评估条件,例如 Speed >= 12。选择 完成 (Enum.AnimationNodeWaitFor|Finished) 以显示 何时 下拉菜单。

如果多个过渡的 表达式 为真,状态机首先评估具有最高 优先级 值的过渡。当优先级相同时,它随机选择一个过渡。为竞争过渡分配不同的优先级,以使结果可预测。

属性类型描述
FromObjectValue一个 ObjectValue,其 Value 指向可以开始过渡的状态的 AnimationNodeDefinition。对于 (任意) 过渡,请保持此属性未设置。
ToObjectValue一个 ObjectValue,其 Value 指向目标状态的 AnimationNodeDefinition。
WaitForEnum.AnimationNodeWaitFor确定显示哪个过渡条件 UI。Enum.AnimationNodeWaitFor|Trigger 显示 表达式 框。Enum.AnimationNodeWaitFor|Finished 显示 何时 下拉菜单。
WhenEnum.AnimationNodeTransitionWhen当 等待 为 完成 时可用。选择 Enum.AnimationNodeTransitionWhen|Finished 以在源状态完成后开始,或选择 Enum.AnimationNodeTransitionWhen|BeforeFinished 以在源状态完成前一个 持续时间 开始混合。
Expression字符串当 等待 为 表达式 时可用。一个布尔图参数或表达式,当其评估为 true 时,开始过渡。有关支持的内容,请参见 表达式。
Priority数字当多个 表达式 为真时使用的顺序。较高的值优先。有效值范围为 0 到 65,535。
Duration数字以秒为单位的时间,用于混合到目标状态。默认值为 0.15 秒。
CurveEnum.PoseEasingStyle在混合过程中使用的缓动。仅支持 Linear 和 CubicV2。默认值为 Linear。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。