
StateTree 是一个状态机,用于管理虚幻UE5引擎中添加的状态,它可用于 AI 和游戏状态管理,与行为树类似,具有树结构层次结构的状态管理是可能的。
启用StateTree插件
1.在虚幻引擎插件管理面板下启用 StateTree 插件,启用 GameplayStateTree 和 StateTree 插件并重新启动。

2.然后从内容浏览器创建一个 StateTree 资产(Artificial Intelligence → StateTree)。

3.将 StateTree 组件添加到任何参与者。

4.将详细信息面板中的 StateTree 资产分配给 StateTree 组件。

5.如果勾选 StateTree 组件的 Start Logic Automatically,StateTree 会在运行时自动启动。
StateTree编辑器屏幕

数据交换方法
StateTree 具有引用输入条件和转移条件中的属性的功能。
- Schema/Context 通过显式指定要添加的 actor 的类,可以指定为 StateTree 输入条件和转移条件指定的类的属性。
- Parameters 如果想管理 StateTree 内部的参数,可以在这里指定,它还可以从 StateTree 组件详细信息设置默认值。
- Evaluators 由于不能直接从 StateTree 组件向 StateTree 端传递参数,因此使用 Evaluators 可以使用 StateTree 中除了上下文和 StateTree 的参数以外的数据。它可以通过从 UStateTreeEvaluatorBlueprintBase 类创建蓝图来使用。
Evaluators 具有以下功能:

- 每当 StateTree 开始执行时,它就会被处理。
- 属性可用于输入条件和转换条件。
状态详细信息

状态进入条件(EnterCondition)
设置确定是否可以选择状态的条件,可以设置的主要参数。

- 反转判断结果(Invert)
- 比较方法(Operator)
- 左侧值(Left)单击 Bind 列表框选择并引用 StateTree 数据交换方法中设置的对象或属性。
- 可以使用右侧值(Right)固定值,但也可以像左侧值一样从 Bind 中选择要引用的对象属性。
自定义输入条件
除了默认输入条件外,还可以添加自定义输入条件。
可以通过从 UStateTreeConditionBlueprintBase 类创建蓝图来添加您自己的输入条件。
任务
- 状态变为活动时执行的操作的集合。
- 处理一直持续到任务完成。
- 当任务完成时,将调用 End 事件并确定状态转换。
- 如果没有满足条件的转移,则进入下一个状态。
创建任务
可以从 UStateTreeTaskBlueprintBase 创建蓝图,各个流程的实现,重写以下函数,添加任务的开始、结束、各帧流程。
- EnterState(在任务开始时)
- Tick(每帧执行任务)
返回节点的值维持并完成任务的执行。

- ExitState(任务结束)
- StateCompleted(任务完成)
使参数可编辑
如果选中 Instance Editable 属性,则可以从 StateTree 编辑器屏幕进行设置。
设置转场
设置从当前状态到另一个状态的转换条件和转换目标。
Trigger
指定执行转换的条件类型。

- 任务完成(OnStateCompleted)
- 成功完成任务(OnStateSucceeded)
- 任务终止失败(OnStateFailed)
- 执行直到满足转换条件(OnTick)
- 外部事件调用(OnEvent)
通过选择此触发器,可以使用 StateTree 组件的 SendStateTreeEvent 函数将状态从外部蓝图更改为 StateTree。

过渡问题
指定满足转换/触发条件时或任务完成后要转换到的状态,可以主要将转移目标指定为以下状态。
- 转移到另一个状态(GOTO STATE)可以指定直接转移到另一个状态的目标。
- 这是与 StateTree 树的区别,因为行为树只有在条件满足时才会执行。
- 转移到同一层级以下的状态(Next State)
- 如果没有满足不转移到另一个状态(Block Transition)的条件的转移,它将转移到下一个状态。
- 如果要继续执行任务处理,请指定此项。
状况
可以用与状态输入条件相同的方式指定转移条件,还可以使用任务属性作为条件参数。

本文总结
StateTree 和 BehaviorTree 是不同的东西,所以用 BehaviorTree 创建的 AI 不能原样移植,但如果熟悉实现状态机,StateTree 会更容易使用。
就个人而言,这是一个易于使用的功能,不仅适用于 AI,而且适用于游戏状态管理。
…
以上是3D天堂关于在虚幻引擎中使用 StateTree 进行状态管理的全部内容,如果你有任何反馈,请随时在本页面下方留言。