GenericAISystem 由可以独立接入的能力系统组成。项目不必一次启用所有部分;关键是让每个决策、运行时真源和执行层只由合适的系统承担。本页用一张关系图先建立整体心智模型,再说明每条关键交接的责任边界。
系统关系图
图中的箭头表示系统间交换的职责和结果,不是固定代码调用顺序。例如 Tactical Assignment 只在项目需要自动选择时进入;没有它时,项目可直接通过 Command System 发起明确命令。Formation 也可以单独用于空间查询,而不一定创建 Squad。
项目的 UI、输入和业务规则可以发起请求,但不应成为第二份运行时真源。GAIS 输出状态和建议后,由项目已有的移动、动画、网络或 GAS 层按项目规则执行。
各系统各自拥有的事情
| 系统 | 拥有的决策或真源 | 不应承担的职责 |
|---|---|---|
| Command System | 明确命令的校验、调度和执行交接。 | 自动寻找最合适的单位或目标。 |
| Tactical Assignment | 候选单位/目标、评分、分配与命令生成。 | 直接替代项目移动后端。 |
| Squad System | 成员、角色、容量、槽位占用和成员 Movement Intent。 | 定义槽位几何或直接实现项目移动。 |
| Formation System | 阵型布局、最终槽位位置和导航自适应。 | 决定成员归属、角色或移动控制。 |
| StateTree 调度 | 当前行为层的覆盖、恢复和任务调度。 | 取代小队真源或绕过命令验证。 |
| Team Identity | 队伍身份及接入项目阵营规则的边界。 | 单独定义战术、阵型或行为状态。 |
三条最常用的交接关系
明确命令与自动战术选择
Command System 接收“谁对什么做什么”的明确请求,并负责校验、调度与执行交接。Tactical Assignment 不替代 Command:它在 AI 需要自行挑选 Unit、目标和意图时,先形成候选、评分和分配,再把得到的命令交给 Command System。项目已经明确指定单位和目标时,直接使用 Command System;不要为此额外创建战术分配计划。
小队、阵型与移动层
FormationComponent 产出最终槽位位置;SquadComponent 决定成员占用并以该结果刷新 Movement Intent;UnitComponent 镜像成员侧结果;每支小队配置的 Driver 或项目移动层再消费 Intent。任何一层都不应倒过来改写前一层的真源。
这条边界使项目可以替换导航、Mover、GMS、动画驱动移动或网络策略,而不必复制阵型和小队的组织逻辑。若 Intent 正确但单位不动,应从 Driver/项目移动层排查;若槽位错误,应回到 Formation 或 Squad 分配,而不是修改 Driver。
StateTree 与队伍身份
StateTree Stack 与 Queue 让 Unit、Squad 或 Command 在不同层组织当前行为和执行序列。它可以触发阵型选择,或临时改变 Movement Intent 的消费策略,但仍需通过所属系统入口提交状态。Team Identity 则为命令、招募、过滤和项目规则提供共同的阵营语义;它不替代这些系统各自的权限、选择或生命周期。
常见跨系统误用
| 现象 | 应回到的边界 |
|---|---|
| Driver 试图决定谁属于小队或占哪个槽位 | 回到 SquadSystem。 |
| 直接使用阵型资产 Offset 作为单位目的地 | 使用 Formation 的最终槽位世界结果。 |
| Command、AIController 和 Driver 同时写移动 | 指定当前移动控制权,明确暂停、覆盖或合并 Intent 消费。 |
| 用 Tactical Assignment 强行实现已经明确的玩家命令 | 直接走 Command System。 |
| 用 StateTree 直接篡改复制容器 | 通过 Squad、Formation 或 Command 的公开入口提交状态改变。 |