阵型系统为一组成员提供可选择的空间布局:阵型资产描述槽位,UGAIS_FormationComponent 在运行时维护当前布局和最终槽位位置。小队读取这些结果来安排成员;阵型本身不拥有成员、角色或移动执行。
阵型解决什么问题
一个小队需要在推进、转向或切换队形时保持可解释的站位。UGAIS_FormationDefinition 把这种布局创作成带稳定 SlotId、标签、位置和朝向的槽位定义;UGAIS_FormationComponent 则选择当前阵型、维护可用阵型与运行时槽位容器,并在布局可用时发出 ready 信号。
它可以独立用于场景布点、预览或空间查询,也可以被小队作为单位站位的唯一空间来源。谁占用哪个槽位由小队决定;阵型只回答“这个槽位在当前世界中在哪里,以及它表达什么空间语义”。
运行时链路
- 项目在 FormationComponent 上配置可用阵型和初始阵型,或在服务端选择新的阵型。
- 组件从当前
FormationDefinition建立运行时槽位,并依据宿主的位置与朝向解析布局。 - 槽位准备完成后,小队可以按角色、标签和评分分配成员;场景工具、蓝图和 EQS 也可通过
QuerySlots查询相同结果。 - 阵型切换、间距变化或导航投射改变几何后,组件通知空间消费者重新协调。
选择阵型、修改可用阵型和运行时几何都遵循服务端权威。拥有宿主的客户端可以通过对应 Server 入口提出切换请求,但项目仍应在服务端决定该请求是否合理。
阵型导航自适应
作者在阵型资产中填写的 Location 是相对 pivot 的本地布局数据,而不是成员最终应该抵达的原始世界坐标。运行时槽位会先结合当前阵型的方向和 FormationSpread,再结合宿主的世界位置与旋转;启用导航自适应后,ProjectSlotsToNavigation 还会把槽位投射或修正到项目可用的导航空间。
因此,小队、调试器和项目侧查询应读取最终的槽位 world transform 或 GetSlotWorldLocation,而不是绕过运行时结果直接使用定义中的 Offset。这样在地面坡度、障碍、重新投射或阵型宿主转向后,所有消费者都面对同一份空间真源。
导航自适应失败或未启用时,不应由阵型组件直接驱动单位移动;先检查最终槽位结果与导航配置,再由小队和项目移动层按各自职责处理。
切换、查询与项目接入
常用的蓝图入口包括 SetCurrentFormation、按 Trait Query 选择阵型、QuerySlots 和 FindSlotRuntimeView。阵型切换适合由玩家命令、战术状态或 StateTree 决策触发;项目只需把“选择什么阵型”的决策交给这些入口,不必自己复制槽位几何。
如果项目需要飞行、船只、分层导航或自定义空间投射,可继承 FormationComponent 并覆写 ProjectSlotsToNavigation。扩展仍应输出最终槽位位置,让小队不需要了解投射细节。
与小队和 Movement Intent 的关系
小队在阵型 ready 后为成员分配槽位,并根据成员自己的最终槽位生成 Movement Intent。Intent 属于小队到单位移动层的交接数据,不是阵型系统的第二套职责:阵型提供空间结果,小队生成成员建议,Driver 或项目移动层执行实际位移。
配置路径见 配置小队、阵型与槽位。小队如何生成和分发 Movement Intent,见 小队系统;字段细节见 阵型、槽位与导航参数,扩展与诊断分别见 阵型与 Movement Intent 扩展点 和 Formation Editor 与槽位诊断。