AstraAI · BT、StateTree 与 HTN

复用控制器上的树组件,正确传入数据、报告整树结果并等待安全退出。

本页内容5 节

顶层选择与树内编排

AstraAI 决定当前运行哪个 Behavior,Logic 可以把这一次动作交给 Behavior Tree、StateTree 或 HTN。Controller 按需复用各后端组件与原生黑板,主 Brain 仍由 AstraAI 负责。

这些组件可以独立使用,不持有 AstraAI 的执行身份;Logic 接收后端结果,校验原执行 Id,再结束本次行为。

入口配置结束要点
UAstraAIBehaviorLogic_BehaviorTreeBehaviorTree、ExecutionModeSingleRun 自然退出但没有显式结果时按 Failed
UAstraAIBehaviorLogic_StateTreeFStateTreeReference,使用 AIComponentSchema通过 StateTree 结果完成,不接管黑板
UAstraAIBehaviorLogic_HTNUHTN、bLoop,HTN 必须有黑板默认不循环,退出等待后端安全停止

Behavior Tree 怎样报告成功

单次 BT 在真正完成整次目标的位置使用 UAstraAIBTTask_FinishTree,明确选择 Succeeded、Failed 或 Aborted;InProgress 不是合法终结结果。

这个节点结束当前整棵 BT,不只是结束所在分支。如果 BT 由 StateTree 的局部任务调用,结果交给直接调用者,不会越过父 StateTree 直接结束顶层 AstraAI 行为。

不要在局部 BT 中调用 Controller 的 RunBehaviorTree 来替换主 Brain。需要局部执行时,使用已接入的后端 Logic 或 StateTree 桥接任务。

StateTree 组合局部树

FAstraAISTTask_RunBehaviorTree 与 FAstraAISTTask_RunHTN 允许 StateTree 调用相应局部后端。按单次任务配置时 bLoop = false;进入前准备所需黑板输入,退出时等待局部任务安全取消。

StateTree 自己不创建、缓存或切换黑板。不要为了让 StateTree“看起来和 BT 一样”另外塞入一套黑板拥有权。

StateTree 调用局部 BT 的结果返回路径时序
正在整理图表…
StateTree 调用局部 BT 的结果返回路径
查看图表源码
sequenceDiagram
  participant AI as AstraAI Logic
  participant ST as StateTree
  participant Task as RunBehaviorTree 任务
  participant BT as 局部 BT
  AI->>ST: 启动本次执行
  ST->>Task: 进入任务
  Task->>BT: 初始化输入并运行
  BT-->>Task: FinishTree 明确结果
  Task-->>ST: 本任务完成
  ST-->>AI: 整棵 StateTree 结束
  AI->>AI: 校验 Id 后完成并清理

黑板复用要初始化临时输入

BT 与 HTN 使用的原生黑板归 Controller 管理。兼容布局复用时可以保留已有值,因此不能把“组件被复用”理解为“所有键已自动清零”。

原生 Logic 可以覆写 InitializeBlackboard 写入本次目标与参数。只初始化自己拥有的键,避免留下上次目标,也避免顺手清除其他已约定保留的数据。

需要蓝图事件图或 latent 的自定义动作使用 BlueprintBase Logic。原生 BT/StateTree/HTN Logic 不能当作可任意蓝图派生的入口。

移动使用引擎能力

UE 5.8 中使用原生 UAITask_MoveTo、StateTree 的 FStateTreeMoveToTask,以及 BT 的原生移动任务。取消与完成由当前任务和后端协议处理,不再增加一层已删除的 Astra Move 包装。

如果退出后新行为一直不开始,先在AI 调试面板核对局部树是否仍在运行或清理;不要用延迟启动下一行为掩盖未退出的任务。

实现入口:插件 BehaviorTree、StateTree、HTN 目录及对应 Behavior Logic。

Starry手册导览从模块进入子模块与具体功能,查阅功能用途、配置步骤、技术架构和扩展方法。工程分层与系统协作了解 Framework、Gameplay 与通用插件的依赖方向,以及配置装配和运行状态的边界。模块总览与接入从行为系统、执行系统与机会调度了解 AstraAI,再为角色配置第一套组合决策。组合与覆盖正确区分优先级、行为分数与 Stack 顺序,按完整路径组织可撤销的配置。评分与抢占沿着条件、优先级、分数、持续有效性与冷却,解释一个行为为何开始或退出。Logic 与生命周期把动作接入 Start、Cancel、Cleanup,正确处理共享模板、蓝图实例与过期异步回调。BT、StateTree 与 HTN复用控制器上的树组件,正确传入数据、报告整树结果并等待安全退出。Objective 与机会生成把领域事实整理成当前机会,让评分只读数据,让生成器独立管理订阅。命令发布与领取发布一条命令后,经机会评估、Take、执行与 EndUse 完成一次受控使用。行为区域用可挂载的 Zone 组件分配行为层,并把回区机会与实际导航分开。调试与排查从初始化到候选、机会、应用层与后端,沿真实运行路径定位 AI 没有行动的原因。模块总览与使用了解通用调试工具的操作、远程连接与窗口扩展,再由各模块的排查说明定位具体问题。netImgui 远程面板在独立桌面程序查看调试窗口,区分远程 UI、游戏视口绘制与玩法网络权限。窗口扩展与属性绘制复用窗口生命周期、反射 Inspector 和场景绘制,避免为每个调试页重做基础设施。模块总览与接入从配置绑定、动作处理、通道缓存与玩家改键了解 Input,再接入角色的输入配置。绑定与配置生命周期理解跨 IMC 的共享绑定、配置所有权、延迟初始化,以及切换角色时的清理。Handler 与能力分派选择正确的输入阶段,把输入交给移动、GAS、GameplayEvent 或 UI,保持共享 Handler 无玩家状态。修饰器与双击选择输入值变换所在层,理解玩家设置修饰器与 Double Tap 的时序规则。通道输入缓存按 GameplayTag 通道开窗,保留首批或末批输入,正常关闭执行,中断取消丢弃。改键与玩家设置通过 GameSettings 统一编辑与应用,区分 SharedSettings 偏好和 Enhanced Input 键映射数据。调试与排查使用 Gamepad 与 Actions 观察和模拟输入,沿设备、映射、绑定、缓存与能力定位问题。模块总览与接入使用 UE 5.8 原生 Async Message System,把事件通知与接收方解耦,查阅消息收发、路由和 Starry 的实际接入。蓝图收发与解绑通过消息 Id、监听、载荷封装与解包的核心连线,掌握蓝图收发和任务解绑。C++ 收发与解绑按取得系统、登记监听、读取载荷、发送与解绑的顺序,查阅原生 C++ 接口用法。标签、时机与生命周期理解消息的标签层级、World 和 Endpoint 路由、游戏线程派发、载荷快照与 C++ 监听清理。项目消息与排查查阅 Starry 已接入的消息标签、载荷和触发点,区分本地通知、状态复制与 RPC 转发,并沿真实链路排查。模块总览与项目接入管理软引用加载、有序回调与任务作用域,了解指示器画布的实际接入,以及加载完成后的资源和宿主生命周期。软引用加载与 C++ 用法用组件加载软对象和控件类,保存加载结果,理解路径数组、同步回调、失败结果,以及重载与退出时的取消清理。主资产与资源驻留按主资产 ID 和 Bundle 预加载资源,理解句柄保留、取消与 GC 引用的关系,以及 AssetManager 和打包配置的职责。回调顺序与独立作用域理解并行加载与有序回调的区别,使用 FAsyncScope 分开取消任务,了解 AsyncEvent、开始完成通知和等待条件的当前边界。在文档中说明蓝图用法将真实蓝图节点嵌入正文,结合步骤、引脚和连线说明功能,节点文本随文章保存。维护这本手册本地文件与网页编辑共用一份 MDX,日常只改内容与关系,沿用共享版式和图表。