StateTree 与行为树的配合

StateTree 并不消灭行为树,而是重新分工。实践中搭配得当时,架构清晰度会有数量级提升。

推荐的分工模型

StateTree(高层:阶段)
├ 巡逻状态 ──→ 行为树 BT_Patrol(细节:绕点、观察、发呆)
├ 战斗状态 ──→ 行为树 BT_Combat(细节:追、攻击节奏、技能选择)
└ 撤退状态 ──→ 行为树 BT_Retreat(细节:找掩体、吃药、呼叫支援)
  • StateTree 管"什么时候是战斗";
  • 行为树管"战斗时具体做什么"。

状态里的行为不一定是完整行为树:也可以是 StateTree 自带的 Task 序列(简单的状态直接写几个任务即可)。

为什么这样分工

只用行为树的痛点 分工后的样子
阶段在海量装饰器里隐式存在,难维护 阶段就是 StateTree 的状态,一眼看清
阶段切换的资源清理(停特效 / 归位黑板)在各任务的完成回调里到处补 StateTree 的退出任务统一清理
阶段相关数值(激进 / 保守倾向)散落装饰器参数 状态自己的参数,互不干扰

转换条件的典型来源

  • 感知事件:目标感知更新 → 转换到战斗状态;
  • 数值阈值:血量低于阈值 → 转换到撤退状态(StateTree 定时评估 + 事件触发);
  • 状态完成:巡逻状态"绕完 3 圈" → 转换到休息状态;
  • 外部系统:技能系统施加"眩晕"效果 → 广播事件 → 转换到眩晕状态。

混用期的注意

  • 不要两套都做决策:高层在 StateTree,细节在行为树;如果发现行为树里又开始做"阶段切换"的事,就把它提到 StateTree;
  • 调试用 StateTree 调试器:它的可视化比行为树的更直观(当前状态高亮),见 StateTree调试器快速入门。