中EN
概念页

行为树与 StateTree

Behavior Tree & StateTree

更新于 2026-10-19 约 6 分钟UE5AI行为树黑板StateTree状态机

UE 的 AI 决策有两套工具:行为树 (Behavior Tree) + 黑板 (Blackboard) 是事件驱动的,条件写成装饰器 (Decorator),用 Simple Parallel、Services 和 Observer Aborts 代替传统并行节点;StateTree 是结合了行为树选择器和状态机转换的通用分层状态机,只在转换触发时按需选择状态,激活路径上的任务并发运行,通过属性绑定传递数据,也是 Mass 的行为层。优先级抢占多的战斗 AI 适合行为树,状态显式、分层或大规模的场景适合 StateTree。

两套决策工具

UE 提供两种 AI 决策结构:行为树 (Behavior Tree) + 黑板 (Blackboard),以及较新的 StateTree。它们解决同一个问题——「当前该做什么」——但调度模型不同。感知、环境查询与寻路见 AI 感知、EQS 与导航。

行为树基础

行为树在图中连接节点,黑板是独立资产,存放树决策所需的黑板键 (Blackboard Key)。执行顺序从左到右、从上到下。复合节点 (Composite:Selector、Sequence、Simple Parallel) 控制流程,装饰器 (Decorator) 挂在复合节点上做条件,任务 (Task) 是叶子动作。运行方式:Pawn 配一个 AI Controller,控制器在 Possess 时运行行为树;寻路需要关卡里有 NavMeshBoundsVolume。(Behavior Tree Overview)Pawn/Controller 分工见 Gameplay 框架。

UE 行为树与传统行为树的区别

特点UE 做法好处
事件驱动不每帧遍历整棵树,被动监听事件(如黑板键变化)再触发重选;高优先级分支可中断低优先级任务性能好;调试历史只显示有意义的变化
条件不是叶子用装饰器而非条件任务图更易读;叶子全是动作;装饰器可作观察者
无完全并行节点Simple Parallel(一个主任务 + 一棵背景子树:「做 A 的同时做 B」)易优化
Services挂在复合节点上,按指定间隔回调,执行停留在子树内期间有效周期性更新(如挑选最佳目标)
Observer Aborts装饰器观察值变化,按 Self/低优先级等设置中止替代并行节点里的「持续检查条件」

(Behavior Tree Overview)

StateTree

官方定义:通用的分层状态机,把行为树的选择器 (Selector) 与状态机的状态 (State)、转换 (Transition) 结合。(StateTree Overview)

flowchart TD
  Root --> A["Selector State 有子状态"]
  A -->|"Enter Conditions 通过"| A1["Leaf State: Tasks 并发执行"]
  A -->|"失败则试兄弟"| A2[Leaf State]
  A1 -->|"首个 Task 完成/成功/失败 或 监控条件"| T{Transition}
  T --> Root
  • 选择:从根开始逐层评估进入条件 (Enter Conditions);不通过则试下一个兄弟;到达叶子即选中;若某状态所有子状态都选不中,它本身也不被选中。选中叶子时,从根到叶的整条路径都处于激活状态,所有激活状态的任务并发执行。
  • 转换:从叶向根评估,第一条成功并完成选择的转换生效,因此通用转换可以放在父状态上共享。可在任务完成时触发,也可标为每 Tick 检查。
  • 与行为树的关键差异:行为树会持续执行选择逻辑;StateTree 只在转换触发时按需运行选择。
  • 数据:参数 (Parameters)、上下文数据 (Context Data,取决于 Schema:Actor 或 Smart Object)、评估器 (Evaluators)、全局任务 (Global Tasks),通过属性绑定传递;任务只能绑定当前与父状态中更早的任务输出。
  • 蓝图扩展:UStateTreeTaskBlueprintBase、UStateTreeEvaluatorBlueprintBase、UStateTreeConditionBlueprintBase。
  • 常见模式:分组共享转换、Next 转换做序列、分层失败处理、分层数据共享。(以上 StateTree Overview)

官方示例里大量出现 Mass 任务(如 Mass LookAt)与 Smart Object,StateTree 也是 MassEntity 数据导向框架 的行为层;而且它不限于 AI,官方举了昼夜系统的例子。(StateTree Overview)

怎么选

场景倾向
优先级抢占明显的战斗 AI(看到玩家就中断巡逻)行为树:事件驱动 + Observer Aborts 天然契合
状态清晰、转换显式、需要分层共享逻辑StateTree
大规模群体(Mass)StateTree
非 AI 的流程逻辑(昼夜、关卡流程)StateTree

(选型为基于两份官方概览的归纳。)

坑

  • 行为树每帧检查条件的写法(在 Task 里轮询)会丢掉事件驱动的优势;条件应写成装饰器。(Behavior Tree Overview)
  • StateTree 的任务全部并发,第一个结束的任务就会触发转换——把“只是持续运行”的任务放进状态时要注意它是否会提前结束。(StateTree Overview)
  • 状态与条件常用 Gameplay 标签表达,见 Gameplay 标签深入(通识用法)。
  1. Behavior Tree Overview UE 5.8 文档
  2. StateTree Overview UE 5.8 文档

相关页面

游戏开发 · UE5AI 感知、EQS 与导航AI Perception, EQS & NavigationAI 的感官层由三块组成:AI 感知 (AI Perception) 组件挂在 AIController 上监听视觉/听觉/伤害等刺激并更新黑板;环境查询系统 (EQS) 用生成器产生候选项、先过滤后打分,回答「哪里最好」;导航系统从碰撞几何生成分瓦片的导航网格 (NavMesh),按多边形代价寻路,并提供 RVO 与 Detour Crowd 避让。它们为行为树/StateTree 提供输入。游戏开发 · UE5Gameplay 框架Gameplay FrameworkGameplay 框架 (Gameplay Framework) 是 UE 提供的一组相互配合的类,用来搭建游戏的基本结构:Actor 与组件 (Component) 构成场景中的一切;GameMode 在服务器上定规则并生成玩家;玩家由“控制器 (Controller) + 棋子 (Pawn)”组成;GameState 与 PlayerState 负责把全局与每个玩家的状态复制给所有客户端;GameInstance 跨关卡存活。游戏开发 · UE5MassEntity 数据导向框架MassEntity FrameworkMassEntity 是 UE5 面向玩法的数据导向 (Data-Oriented) 计算框架,属于实体-组件-系统 (Entity Component System, ECS) 一类设计:实体 (Entity) 只是一个 ID 加上一组片段 (Fragment) 数据,相同组成的实体归入同一原型 (Archetype) 并按内存块 (Chunk) 连续存放,无状态的处理器 (Processor) 通过实体查询 (EntityQuery) 批量处理片段。它适合成千上万个同质对象(人群、交通),MassGameplay 插件在其上提供表现、生成、LOD、复制、StateTree 等功能。游戏开发 · UE5Gameplay 标签深入Gameplay Tags In DepthGameplay 标签 (Gameplay Tags) 是用 . 分层的用户定义标签,必须登记到标签字典(项目设置 .ini、数据表或 C++ 原生标签宏)。对象用 FGameplayTagContainer 持有多个标签并以 HasTag/HasAny/HasAll 判断(注意空集合语义),复杂条件用 FGameplayTagQuery 的叶/根表达式组合并配置在资产里。它是 GAS、AI 和各类玩法状态的通用词汇表;大项目可限制标签编辑权限,并用 IGameplayTagAssetInterface 免 Cast 取标签。游戏开发 · UE5蓝图与 C++ 协作Blueprint & C++ InteropEpic 官方建议:多数项目混用蓝图 (Blueprint) 与 C++,以 C++ 作为基础、在其上构建蓝图类。C++ 适合“编程”——定义系统;蓝图适合“脚本”——在已有系统上定义具体行为。两者通过反射说明符互相调用:C++ 用 BlueprintCallable/BlueprintReadWrite 等暴露给蓝图,用 BlueprintImplementableEvent/BlueprintNativeEvent 让蓝图实现或覆盖 C++ 声明的函数。游戏开发 · UE5相机系统Camera System传统相机链路是:PlayerController 持有 PlayerCameraManager,后者维护一个视图目标 (view target),通过 CalcCamera 取得相机组件或 Actor 的位置朝向,并在不同目标之间混合。实验性的 Gameplay Camera System 把相机行为做成数据资产:一个 Camera Asset 包含多个由节点网络构成的 Camera Rig、进出转换,以及决定当前使用哪个 Rig 的 Camera Director。游戏开发 · UE5Gameplay 调试器与可视化日志Gameplay Debugger & Visual LoggerGameplay 调试器 (GDT) 用于在运行时实时查看玩法数据(Pawn、AIController、行为树与黑板、EQS、感知、导航网格),联网时客户端也能看,并且只复制已启用类别的数据。可视化日志 (Visual Logger) 则把 Actor 的状态和图形化信息录下来,之后在编辑器里按时间轴来回拖动查看,适合排查难以复现的 bug。游戏开发状态模式与有限状态机State Pattern & Finite State Machines状态模式 (State Pattern) 把对象“依赖状态的行为”分散到各个状态类中,对象只持有指向当前状态的指针并把调用委托给它,状态切换就是换指针。它是实现有限状态机 (Finite State Machine, FSM) 的一种方式。FSM 能用很强的结构约束理清一团乱麻的标志位代码;状态组合爆炸、需要复用和需要“回到之前状态”时,分别用并发状态机、分层状态机和下推自动机来扩展。游戏开发游戏音频功能与角色对话Game-Specific Audio Features & Character Dialog在 3D 音频渲染管线之上,游戏还要实现分屏、物理驱动音频、动态音乐、角色对话、声音合成和人群声音等专门功能。GEA 重点讲了分屏的多听者问题、顽皮狗《最后生还者》的角色对话系统(逻辑台词、随机不重复、优先级与打断、把对话作为一等实体、排他性、基于规则和事实字典的分支对话、按区域标签的情境台词、对话手势)以及音乐系统(播放列表、紧张度、插入乐、过渡)(GEA4 卷 II 15.6)。游戏策划间接控制Indirect Control故事与玩法的冲突本质上是关于自由的冲突。Schell 的关键论点:不必给玩家真正的自由,只需给玩家自由的感觉——"真实的只有你感受到的"。设计师无法直接控制玩家,但可以通过六种主要手段施加间接控制:约束、目标、界面、视觉设计、角色、音乐;再进一步是让 NPC 与设计师共谋。他称间接控制"可能是全书最微妙、最精巧、最具艺术性也最重要的技巧"(第 3 版第 18 章 Story and Game Structures Can Be Artfully Merged with Indirect Control;第 1 版为第 16 章)。综合游戏编程模式选型:解耦与性能Choosing Game Programming Patterns本页把《Game Programming Patterns》里的 19 个模式放到同一张取舍图上:大多数模式要么为了解耦(降低改代码时需要装进脑子里的知识量),要么为了性能(利用对数据和硬件的具体假设),而这两个目标经常互相拉扯。下面先讲全书的定位和 Nystrom 的架构观,再给出按问题选模式的路线和与 UE 的对照。游戏开发行为树原理Behavior Tree Fundamentals行为树 (Behavior Tree, BT) 用层级节点控制决策流:叶子做动作或条件,Sequence / Selector 等组合节点决定子节点如何推进;节点返回 Success / Failure / Running,从而自然跨多帧。相对 FSM,BT 更易用优先级回退表达「失败了还有 Plan B」。游戏开发黑板架构Blackboard Architecture黑板 (Blackboard) 是多模块共享的「工作记忆」:感知写入、决策读取、任务更新键值,避免各子系统用私有状态互相耦合。行为树的 Data Context、GOAP 的 Working Memory、Halo 的 Props,都是同一思想的变体。游戏开发游戏 AI 决策管线Game AI Sense-Decide-Act Pipeline游戏 AI(与生成式 DNN 不同)通常按 感知 → 决策 → 执行 分层:底层是寻路、感知与记忆;中层是角色控制(对接动画/物理);上层是目标与决策(行为树、效用、规划等)。GEA 强调「perception is reality」——玩家看不见的内部聪明不算数。游戏开发决策架构选型:FSM、行为树与效用Choosing FSM, Behavior Tree & Utility AIFSM 强在少量离散状态与硬转换;行为树强在优先级回退与模块化任务;效用强在连续权衡与数据驱动调参;GOAP 强在声明式动作组合与重规划。实作常分层混用,而不是四选一宗教战。

被这些页面引用3 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原