AstraAI · 模块总览与接入

从行为系统、执行系统与机会调度了解 AstraAI,再为角色配置第一套组合决策。

本页内容6 节

子模块与功能

进入具体功能,查阅使用步骤、运行机制与扩展方法。

行为系统

  • 组合与覆盖

    正确区分优先级、行为分数与 Stack 顺序,按完整路径组织可撤销的配置。

  • 评分与抢占

    沿着条件、优先级、分数、持续有效性与冷却,解释一个行为为何开始或退出。

行为执行

  • Logic 与生命周期

    把动作接入 Start、Cancel、Cleanup,正确处理共享模板、蓝图实例与过期异步回调。

  • 树后端
    • BT、StateTree 与 HTN

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

机会与调度

  • Objective 与机会生成

    把领域事实整理成当前机会,让评分只读数据,让生成器独立管理订阅。

  • 命令
    • 命令发布与领取

      发布一条命令后,经机会评估、Take、执行与 EndUse 完成一次受控使用。

  • 行为区域
    • 行为区域

      用可挂载的 Zone 组件分配行为层,并把回区机会与实际导航分开。

调试与排查

  • 调试与排查

    从初始化到候选、机会、应用层与后端,沿真实运行路径定位 AI 没有行动的原因。

模块职责与子模块协作

AstraAI 把“现在知道什么”“可以做什么”“这次怎样执行”拆开。Objective 保存当前机会,Modifier Stack 组合可选行为,Behavior 给机会评分,Logic 执行被选中的动作。主决策组件是 Controller 上的 UAstraAIComponent。

Starry 已通过 AStarryAIController 接入插件。日常配置从角色的 AISetup 出发,不需要再给同一个角色手动挂第二套选择器。

行为系统负责配置组合、候选筛选与评分,行为执行负责一次动作的启动、结束和取消;机会与调度连接领域事实、外部命令和行为区域。上方功能目录按这些职责组织,具体功能页同时说明配置方法与运行机制。BT、StateTree 和 HTN 是 Logic 可使用的局部树后端,归在行为执行之下。

从角色配置到一次行为执行关系 / 流程
正在整理图表…
从角色配置到一次行为执行
查看图表源码
flowchart LR
  Pawn(AI 角色的 AISetup) --> Setup(BrainType = Composition)
  Setup --> Stack(ModifierStack)
  Setup --> Objectives(ObjectiveSetup)
  Stack --> Selector(AstraAI 选择器)
  Objectives --> Facts(当前 Objective)
  Facts --> Selector
  Selector --> Behavior(选中的 Behavior)
  Behavior --> Logic(一次 Logic 执行)

创建第一套配置

以下是一条验证接入的操作路线。示例名称用于说明命名,不表示项目已预置这些资产。

  1. 在内容浏览器的 AI → AstraAI 分类创建 Modifier,命名为 AIBM_ManualExample。
  2. 打开 Modifier 编辑器,在 Normal 下添加一个 Behavior,例如路径 Idle。使用基础 Behavior,设置 StaticWeight = 1,ObjectiveClass 留空。
  3. 在该节点的 Logic 中使用原生 Wait,设置 Seconds = 1。它只等待并完成,不驱动移动或动画。
  4. 创建 Modifier Stack,命名为 AIBMS_ManualExample,把刚才的 Modifier 类型加入列表。
  5. 创建 Objective Component Setup,命名为 AIOCS_ManualExample。这次 Wait 不依赖 Objective,可以先保持 GeneratorTemplates 为空。
  6. 创建 UStarryAISetupDataAsset 配置,选择 BrainType = Composition,填入 ModifierStack 与 ObjectiveSetup。
  7. 在 AISetup 中指定有效的 PerceptionSenseProfile。可以复用已有 UStarryAISenseProfile;新建时配置需要的感官,并让 DominantSense 与其中一种感官匹配。PerceptionAwarenessProfile 按察觉积累需求选择。
  8. 在 AStarryAICharacter 的派生角色中设置 AISetup,确认 AI Controller 使用 AStarryAIController 或其派生类,并按关卡需要配置自动控制。
  9. 在服务端或单机世界运行,检查控制器初始化到 Ready,再通过 AI 调试面板观察 Idle 的执行。

AISetup 的资产校验要求填写 PerceptionSenseProfile,即使这次 Wait 不使用感知目标也应配置;PerceptionAwarenessProfile 可选。AISetup 还须位于 Asset Manager 已扫描的内容范围,当前项目扫描 /Game 下的 StarryAISetupData 资产。

默认 CooldownSeconds = 0,因此只有这个候选时,Wait 完成后可以再次被选中。若想更容易观察两次执行之间的空隙,可给 Behavior 设置冷却;这不是 Wait 自己的循环参数。

资产与类型怎样区分

前缀职责编辑位置
AIBM_一层增删 Group、Behavior 的配置Modifier 专用编辑器
AIBMS_可复用的 Modifier 类型与顺序Stack 专用编辑器
AIB_Behavior 类型,定义条件与评分类型蓝图;节点参数在 Modifier 内配置
AIBG_Group 类型,筛选新候选类型蓝图;组参数在 Modifier 内配置
AIBL_可拥有本次执行状态的蓝图 Logic以 BlueprintBase 为父类的蓝图
AIO_Objective 类型,描述机会数据Objective 派生类型
AIOG_Objective Generator 类型Generator 派生类型
AIOCS_生成器模板列表Objective Component Setup 资产
AIC_可发布、领取和结束使用的命令类型Command 派生类型

Modifier 中的 Group、Behavior、Logic 是配置模板,不等于每个 NPC 都会复制一整棵对象树。需要自定义 Behavior 时先创建类型,再在 Modifier 中选择类型与填写该节点的参数。

初始化何时算成功

Controller 先异步加载配置,创建并初始化 Objective 组件,再初始化 AstraAI 组件。完成后状态变为 Ready,广播 OnAISetupComplete,随后启动组合决策。HasCompletedAISetup() 仅在 Ready 时为真;失败通过 OnAISetupFailed 通知。

不要在 Pawn 刚生成时假定所有软引用已加载。依赖决策组件的项目功能应等待完成事件,或者先检查当前完成状态。客户端 NM_Client 世界不运行这套 AI 初始化。

自定义 Pawn 通过 IStarryAISetupProviderInterface::GetAISetupData 提供配置。撤销控制、结束游戏或配置失败会进入关闭流程,清理 Brain、Objective、黑板与感知等本次接入资源。

接下来做什么

需要叠加战斗、日常或临时行为时,阅读组合与覆盖。需要理解为什么选中某个行为,阅读评分与抢占。需要让行为真正驱动项目能力,阅读Logic 与生命周期。

实现入口:Plugins/AI/AstraAI、Framework/AI/StarryAIController、Framework/AI/StarryAISetupDataAsset、Framework/Character/StarryAICharacter。后三处路径相对于 Source/StarryGame。

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,日常只改内容与关系,沿用共享版式和图表。