AstraAI · 模块总览与接入
从行为系统、执行系统与机会调度了解 AstraAI,再为角色配置第一套组合决策。
本页内容6 节
子模块与功能
进入具体功能,查阅使用步骤、运行机制与扩展方法。
行为执行
- Logic 与生命周期
把动作接入 Start、Cancel、Cleanup,正确处理共享模板、蓝图实例与过期异步回调。
- 树后端
- BT、StateTree 与 HTN
复用控制器上的树组件,正确传入数据、报告整树结果并等待安全退出。
- 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 执行)创建第一套配置
以下是一条验证接入的操作路线。示例名称用于说明命名,不表示项目已预置这些资产。
- 在内容浏览器的
AI → AstraAI分类创建 Modifier,命名为AIBM_ManualExample。 - 打开 Modifier 编辑器,在
Normal下添加一个 Behavior,例如路径Idle。使用基础 Behavior,设置StaticWeight = 1,ObjectiveClass留空。 - 在该节点的
Logic中使用原生 Wait,设置Seconds = 1。它只等待并完成,不驱动移动或动画。 - 创建 Modifier Stack,命名为
AIBMS_ManualExample,把刚才的 Modifier 类型加入列表。 - 创建 Objective Component Setup,命名为
AIOCS_ManualExample。这次 Wait 不依赖 Objective,可以先保持GeneratorTemplates为空。 - 创建
UStarryAISetupDataAsset配置,选择BrainType = Composition,填入ModifierStack与ObjectiveSetup。 - 在 AISetup 中指定有效的
PerceptionSenseProfile。可以复用已有UStarryAISenseProfile;新建时配置需要的感官,并让DominantSense与其中一种感官匹配。PerceptionAwarenessProfile按察觉积累需求选择。 - 在
AStarryAICharacter的派生角色中设置AISetup,确认 AI Controller 使用AStarryAIController或其派生类,并按关卡需要配置自动控制。 - 在服务端或单机世界运行,检查控制器初始化到
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。