StateTree 与 Mass
自动关联目录:StateTree 与 Mass
覆盖说明:官方 Gameplay Systems 正文点名 State Trees 与 Mass Entity System 为 AI 系统之二(已核实)。本页覆盖两者的定位、适用边界与代价,具体 API 以目标版本为准。
1. 定位
StateTree 与 Mass 都是"行为树之外的另一条路",但方向相反:
- StateTree:比行为树更擅长状态驱动的逻辑,且不限于 AI(可用于任何对象)
- Mass:为海量简单实体设计,用 ECS 式的数据布局换取规模
一句话定位:个体复杂用行为树/状态树,个体简单但数量极多用 Mass。
2. StateTree
| 对比 | Behavior Tree | StateTree |
|---|---|---|
| 组织方式 | 树 + 装饰器/服务 | 状态机 + 层级状态 |
| 擅长 | 序列化的任务流程 | 状态驱动(待机/警戒/战斗/逃跑) |
| 数据 | 黑板(Blackboard) | 参数(Parameters) |
| 适用范围 | 主要 AI | AI 与其它任何对象 |
| 心智负担 | 树变复杂后难维护 | 状态图更接近直觉 |
什么时候选 StateTree:
- 逻辑本质上是"处在某个状态、满足某条件就切换"
- 需要一套机制同时服务于 AI 与非 AI 对象
- 行为树里出现了大量"装饰器 + 强制返回"的绕弯写法
什么时候仍用行为树:
- 现有项目已在用,迁移成本高
- 逻辑确实是"依次执行一组任务"的流程
3. Mass(Mass Entity / Mass AI)
| 要点 | 说明 |
|---|---|
| 定位 | 大规模实体的框架(ECS 式) |
| 适用 | 成百上千的简单实体:人群、兽群、大批量单位 |
| 机制 | 数据按片段(Fragment)布局,处理器(Processor)批量处理 |
| 可视化 | 可配合渲染与表示层 |
| 与常规 AI 的关系 | 不是替代,而是"简单实体的另一条路" |
判断标准:实体数量是否大到"每个都跑完整行为树"已经不可行?是 → Mass。
4. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| StateTree | 状态驱动更直观、可用于非 AI | 与行为树并存会增加两套心智模型 | 团队已熟练行为树且逻辑是流程式 |
| Mass | 规模极大时成本可控 | 心智模型与常规 Actor 完全不同,调试更难 | 只有几十个 AI 时完全不必 |
| Mass + 常规 AI 混用 | 按复杂度分层 | 两套系统的数据交换要做桥接 | 简单项目不必混 |
| 行为树 | 成熟、文档与社区多 | 复杂后维护成本高 | 状态驱动型逻辑不划算 |
5. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| 用行为树表达状态机 | 装饰器绕成一团 | 逻辑若是状态切换,应换 StateTree |
| 只有几十个 AI 却上 Mass | 复杂度白增 | 数量不够就不该用 |
| Mass 与常规 Actor 数据不同步 | 表现与逻辑脱节 | 需要明确的桥接层 |
| 两套决策系统并存 | 团队认知负担 | 明确各自负责哪类实体 |
| StateTree 参数与黑板混用 | 数据分散 | 统一数据源 |
| Mass 调试困难 | 看不到个体状态 | 需要专门的调试可视化 |
6. 排查顺序
1. 先判断规模:几十个 → 行为树/StateTree;成百上千个简单实体 → Mass
2. 再判断逻辑形态:状态驱动 → StateTree;任务流程 → 行为树
3. 混用时 → 明确分层与桥接
4. 调试 → 各系统有各自的调试手段,见 `AI 调试`参考
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/a32f56d3.html
更新于:2026年10月10日