小队系统

GAIS_Cover
YuewuDev

作者

YuewuDev

创建时间: 2026年10月12日更新时间: 2026年10月12日

目录

小队系统

小队系统把一组单位作为可创建、补员、重组和指挥的组织来维护。它持有成员、角色、容量与槽位占用的运行时真源;当阵型提供最终槽位位置后,小队再为每个成员生成 Movement Intent,并交给项目移动层消费。

组织真源在什么位置

UGAIS_SquadSubsystem 索引当前 World 的小队和单位,负责发现、创建、合并、招募与重组。单支小队的已提交成员、角色、槽位和生命周期由宿主 Actor 上的 UGAIS_SquadComponent 持有;UGAIS_UnitComponent 则把所属小队、当前角色、AssignedSlotId 与最终 Movement Intent 镜像到成员侧,方便 UI、StateTree、Driver 和调试读取。

静态配置在 UGAIS_SquadDefinition:它定义小队宿主、默认单位和角色、可用阵型、槽位评分、默认行为,以及 Movement Intent 的默认响应、标签和 Driver。不要把 Definition 当成运行时成员状态容器。

小队、阵型和槽位分配

小队初始化时读取 Definition 并配置 FormationComponent。Formation 尚未 ready 时,小队可以等待;因此创建或初始化成功不表示此刻每个成员都已有可用槽位。阵型 ready 后,SquadComponent 按角色、标签、容量与评分为成员提交槽位分配,并把最终分配同步到 UnitComponent。

阵型负责槽位的空间几何和导航投射,小队负责“哪个成员占哪一个可用槽位”。阵型变更、成员变更或角色变更会让小队重新协调分配;项目不应直接修改 UnitComponent 的镜像来绕过这条链路。

小队如何生成 Movement Intent

槽位分配提交后,SquadComponent 会请求刷新成员的 Movement Intent。每个 Intent 以该成员已分配槽位的最终世界位置为目标,再叠加 SquadDefinition 的默认响应设置、语义标签,以及小队或单位的 Modifier。最终结果镜像到 UnitComponent。

plaintext
1Formation 最终槽位
2→ SquadComponent 分配成员槽位
3→ SquadComponent 刷新每个成员的 Movement Intent
4→ UnitComponent 镜像结果
5→ Movement Intent Driver / 项目移动层消费

Intent 表达期望位置、速度、朝向与是否应移动等建议,不替代导航、避障、动画、网络预测或项目自己的命令优先级。UGAIS_UnitMovementIntentDriver 是每支小队用于获取、应用和释放这份控制的策略;它不重新计算阵型,也不改变成员和角色真源。

当命令、StateTree 或项目移动系统需要临时接管移动时,应明确暂停、覆盖或合并 Intent 的消费,而不是让多个后端同时持续写同一移动控制。

StateTree、命令与权威边界

SquadComponent 提供小队级命令入口,以及设置和清除 Squad 层 StateTree 的入口。它们让组织状态参与行为调度,但不替代 Command System 的显式请求或 Tactical Assignment 的候选选择。

小队真源和槽位分配在服务端;客户端 RPC 只是拥有者的请求路径。运行时创建通常通过 Subsystem,关卡预放置的小队在服务端初始化。观察初始化状态和 OnSquadActivatedEvent,而不是只根据成员数量推断小队已经可以工作。

下一步

搭建流程见 配置小队、阵型与槽位,阵型空间与导航自适应见 阵型系统。Movement Intent 的参数、项目移动接入与临时 Modifier 分别见 小队、角色与单位参数、接入 Movement Intent 到移动系统 和 用 StateTree 临时修改 Movement Intent。