跳转到正文

开始使用

作

作者

作者

创建时间: 2025年4月15日更新时间: 2026年10月20日

目录

GenericCombatSystem 快速开始

最短闭环是:启用 GCS 及其 .uplugin 依赖、按 GenericGameplayAbilities 文档的快速开始完成 Ability System 初始化,再在战斗角色上挂 UGCS_CombatSystemComponent,用一条近战 Trace 或配套项目关卡打出可观察的攻击结果。插件包不带 Content;购买后另行提供的配套项目是另一条观察路径。

1. 启用插件

在项目中启用 GenericCombatSystem。它会带上 GenericGameplayAbilities,以及 EnhancedInput、GameplayAbilities、ModularGameplay、TargetingSystem、StateTree、GameplayStateTree、MotionWarping。StateTree 与 MotionWarping 出现在 .uplugin 依赖里,GCS 运行时源码没有直接调用它们的 API。

输入缓冲、Input Setup 和 StateTree 输入节点属于产品附带的 Generic Input System,不是本插件模块图上的依赖。按键如何激活战斗 Ability,按 GIPS 或项目自己的输入层处理。

同时把 Ability System Globals 指到 UGGA_AbilitySystemGlobals,否则 Combat Flow 用的 GGA 属性回调和 Effect Context Payload 不会按预期分配。步骤见 GGA 文档。

2. 挂上最小组件集

在要参与战斗的 Pawn 上:

  1. 确认权威端已经 InitializeAbilitySystem。
  2. 添加 UGCS_CombatSystemComponent,指定 CombatFlowClass(需要一个可实例化的 UGCS_CombatFlow 子类,并在上面放至少一条 Processor)。基类 HandleGameplayEffectExecute 为空,接线步骤见 注册第一条攻击结果。
  3. 近战再加 UGCS_TraceSystemComponent;远程再加 UGCS_BulletSystemComponent。
  4. 需要锁定或阵营过滤时加 UGCS_TargetingSystemComponent 与 UGCS_CombatTeamAgentComponent。
  5. 让角色(或组件)实现 IGCS_CombatEntityInterface,至少能返回当前目标、是否死亡、当前武器和连击表(没有连击就返回空表)。

蓝图里用 Get Combat System Component / Find Combat System Component 确认组件找得到。

3. 准备一份攻击定义

新建 Data Table,行结构选 GCS Attack Definition(FGCS_AttackDefinition)。先填一行:

  • AttackTags:例如近战、轻击。
  • TargetEffectClass:一个会改目标属性的瞬时 Gameplay Effect。需要本地预测反馈时,给该 Effect 加上 UGCS_GEComponent_PredictivelyExecute。
  • 其余击退、Cue、Extension 可先留空。

近战再准备一行 FGCS_TraceDefinition(TraceTag、形状、Sweep 通道)。把该行填进 UGCS_AttackRequest_Melee 的 AttackDefinitionHandle,并在 TracesToControl 里写上同一个 Trace 标签。

4. 发出一次近战

任选一条路径:

路径

做什么

Ability Task

战斗 Ability 里调用 HandleCollisionTraces,再 AddMeleeRequest。窗口结束时 RemoveMeleeRequest。

动画窗口

在 Montage 上放 GCS_ANS_AttackTrace,填好内嵌的 Melee Request。Notify 不是运行时执行器,仍要由 Collision Trace Task 读取这份请求。

命中后,用 UGCS_CombatFunctionLibrary 把攻击定义句柄写入 Effect Context,再对目标应用 Effect。目标身上的 Combat Flow 会在属性 PostGameplayEffectExecute 回调里生成 FGCS_AttackResult 并注册到组件的 FastArray。

远程路径见 做一次远程攻击:WaitForBulletEvent 从 Gameplay Event 取出 UGCS_AttackRequest_Bullet。

5. 验证

PIE 后打开 Gameplay Debugger 的 Combat 分类(模块启动时注册):

  1. Shared 段能看到 Combat 组件、Combat Flow、战斗实体接口。
  2. 打出一击后,Attack Result 段出现最近一条结果,并能看到是否预测、是否已复制。
  3. 近战还能在 Trace 段看到句柄与激活状态。
  4. 日志类别 LogGCS_Combat / LogGCS_Trace 提到 Verbose,能看到结算与 Sweep。

多人 PIE 先看服务器是否产生 Result,再看 AutonomousProxy 的 LocalPredicted Processor 是否只跑一次。

常见失败

现象

先查

蓝图搜不到 GCS 组件

插件与依赖是否启用,工程是否已编译

有动画没有命中

Trace 组件是否存在;ANS 是否只是数据容器而 Task 没启动;碰撞通道

Effect 没有攻击上下文

是否写入 FGCS_ContextPayload_Combat;Globals 是否为 GGA

客户端有特效、服务器无结果

预测弹不会应用 GE;权威路径是否真的 Apply

下一步

  • 对照现成关卡:观察配套项目
  • 让 Flow 产出第一条 Result:注册第一条攻击结果
  • 分清 GGA / GIPS:系统边界
  • 排错:调试与排错