行为树、状态机与 StateTree:怎么选

UE5 里写决策层有三把椅子:蓝图状态机(ScriptedState 逻辑)、行为树(Behavior Tree)、StateTree(状态树)。没有"最好",只有"最合适"。

三者的定位

框架 核心模型 最擅长 短板
行为树 树形节点 + 装饰器 + 服务 有层次的复合行为(巡逻 → 追击 → 攻击的分支组合) 状态感弱("我在哪个阶段"要靠黑板间接表达)
StateTree 状态 + 转换(增强型层级状态机) 明确的阶段性 AI(阶段机的每个状态本身就是一棵小行为树) 新框架,学习与排错资料相对少
蓝图状态机 蓝图里的 if / switch + Tick 事件 极简 AI(2~3 个状态) 规模化后蓝图臋肿、无法复用

一个直觉的选型标准

你的 AI 长这样 推荐
"有的情况做 A,没的情况做 B" 的简单分支 蓝图里的状态逻辑足够
巡逻 / 警戒 / 追击 / 攻击多个模式来回切 行为树或 StateTree
每个模式内部又有复杂子行为 StateTree(每个状态内嵌一个小行为树)
需要多个 AI 共享一套逻辑、参数各异 行为树的参数化 + 数据表

它们不是互斥的

UE 的现代实践是混用:

  • StateTree 做高层阶段切换(巡逻 / 战斗 / 撤退);
  • 每个状态内部跑一个行为树处理细节(战斗状态里的攻击节奏);
  • 感知系统与 EQS 伺候两边。

引擎的 StateTree概述 明确说明它的定位是"结合行为树的表达力与状态机的清晰"。新项目可以直接从 StateTree 起步,维护中的旧项目继续用行为树也完全没问题。