挂上战斗组件
本篇把一个战斗角色接到 GCS:权威端先按 GenericGameplayAbilities 文档完成 InitializeAbilitySystem,再挂战斗组件并实现 IGCS_CombatEntityInterface。做完后 Debugger Shared 段能看到组件和接口,本篇先不发出攻击。
相关文档:系统分层见 系统边界;Flow 与结果见 战斗流程与攻击结果。
前置条件
- 已按 快速开始 启用
GenericCombatSystem及其.uplugin依赖。GIPS 负责输入缓冲,不是本插件模块依赖。 - 已按 GGA 文档把 Ability System Globals 指到
UGGA_AbilitySystemGlobals,并在权威端调用InitializeAbilitySystem。本页点名 GGA 文档,不链到其他插件路径。 - 准备一个可在服务器生成的战斗 Pawn。GCS 不要求指定角色基类,Actor 或组件实现接口即可。
- 准备一个可实例化的
UGCS_CombatFlow子类(基类是 Abstract),上面至少放一条 Processor。怎么覆写并接到 GGA 回调,见 注册第一条攻击结果。
1. 先确认 Ability System
在挂 GCS 之前,权威端角色已经有可用的 GGA Ability System Component。Combat Flow 靠 GGA 的属性回调和 Effect Context Payload 收成 FGCS_AttackResult。ASC 还没初始化时,后面的命中和 GE 都不会按预期进入 Flow。
2. 挂最小组件集
在要参与战斗的 Pawn 上:
- 添加
UGCS_CombatSystemComponent,指定CombatFlowClass。权威端BeginPlay会用这个类NewObject出 Flow 并复制给客户端,所以不能填抽象基类。 - 近战再加
UGCS_TraceSystemComponent。实际 Sweep 由 Trace Subsystem Tick,组件持有 Handle 和命中事件。 - 远程再加
UGCS_BulletSystemComponent。它管理复制的子弹 Entry、实例和预测契约。 - 需要锁定或阵营过滤时加
UGCS_TargetingSystemComponent与UGCS_CombatTeamAgentComponent。Targeting 可挂在非 Pawn Actor 上;Team 组件复制FGenericTeamId。 - 让角色或其中一个组件实现
IGCS_CombatEntityInterface。至少能返回当前目标、是否死亡、当前武器和连击表(没有连击就返回空表)。
动作选择如果走标签匹配,用 UGCS_AbilityActionSetSettings 这份 DataAsset,不要把它当成项目设置类。实体的 QueryAbilityActionsByContext 再读这份资产。
3. 实现接口时先写最小返回
接口可以挂在 Actor 或组件上。UGCS_CombatFunctionLibrary::GetCombatEntityInterface / FindCombatInterface 会先看 Actor,再找实现了接口的组件。
最小实现建议:
函数 | 本篇建议 |
|---|---|
| 转给 |
| 返回项目自己的死亡标记;还没做死亡就先返回 false |
| 记住“本次动作要用的武器”,不要在这里做装备栏切换 |
| 没有连击返回空;有武器时通常转给武器上的连击表 |
其余旋转、移动集、死亡流程可以先留空实现,等连击和武器篇再补。
预期结果
权威端 PIE 后,角色上能找到 Combat 组件和已实例化的 Combat Flow。蓝图 Get Combat System Component / Find Combat System Component 成功。Debugger Shared 段把战斗实体接口标为存在。
验证
UGCS_CombatSystemComponent::GetCombatSystemComponent/FindCombatSystemComponent非空。- 近战角色
GetTraceSystemComponent/FindTraceSystemComponent成功;远程角色再确认GetBulletSystemComponent/FindBulletSystemComponent。 - 锁定角色能
GetTargetingSystemComponent;阵营角色能通过GetCombatTeamAgentInterface读到队伍。 - 打开 Gameplay Debugger 的 Combat 分类(模块启动时注册为
GenericCombatSystem):Shared 段看到 Combat 组件、Combat Flow,以及战斗实体接口。 - Flow 上的 Processor 列表不是空的。
常见失败
现象 | 先查 |
|---|---|
蓝图搜不到 GCS 组件 | 插件与依赖是否启用;工程是否已编译后重开编辑器 |
Combat Flow 一直是 None | |
Shared 段没有战斗实体接口 | 接口是否加在被查找的 Actor/组件上;是否编译 Blueprint |
后面打不出 Attack Result | 权威端是否先 |
客户端看得到组件、服务器没有 Flow | Flow 只在权威端创建。先看服务器窗口 |
下一步
组件找得到之后,按 注册第一条攻击结果 让 Combat Flow 真正产出 Result。近战再走 做一次近战攻击,远程走 做一次远程攻击。