跳转到正文

战斗系统指南

此部分的内容涵盖了通用战斗系统中的核心知识点,包括战斗实体概念,整体战斗攻防流程,伤害计算,战斗结果处理等。 让你对GCS的工作流有一个整体的认识。

作

作者

作者

创建时间: 2025年11月24日更新时间: 2026年10月20日

目录

核心功能

GenericCombatSystem 叠在 GenericGameplayAbilities 上,负责把一次攻击从请求收到结算。Ability 或动画窗口发出攻击请求,Trace 或子弹产生命中,Gameplay Effect 在属性回调里收成攻击结果,再由 Combat Flow 上的 Processor 决定受击、Cue 或项目规则。近战挥砍和远程射击走同一套结果容器,差别只在命中怎么来。

六条能力线

我想搞清楚的问题

先读

输入、技能、战斗各管哪一段,项目还要写什么

系统边界与扩展范围

CombatFlow、AttackResult FastArray、Processor 策略

战斗流程与攻击结果

攻击定义、近战/子弹请求、Effect Context 载荷

攻击定义与请求

Trace 组件、Subsystem Sweep、动画命中窗口

Trace 与命中窗口

子弹三层状态、预测边界、穿透与链式发射

子弹运行时

锁定目标、候选列表、阵营过滤

目标锁定与阵营

连击选招、武器 Actor、战斗实体接口

连击、武器与战斗实体

完整字段留给 参数参考。要改 Processor、接口或子弹实例时,进入 扩展指南。

请求到 Processor 的链路

一次可观察的攻击通常按这条路径走完:

UGCS_CombatAbility 继承 UGGA_GameplayAbility,从 ActorInfo 取 Combat 组件和战斗实体接口。近战 Task HandleCollisionTraces 在窗口里 AddMeleeRequest;远程由 UGCS_BulletSystemComponent::RequestSpawnBullet 生成批次。命中后,函数库把攻击定义句柄写入 FGCS_ContextPayload_Combat,再对目标应用 Effect。目标身上的 Combat Flow 吃 GGA 的 FGGA_GameplayEffectModCallbackData,在 HandleGameplayEffectExecute 里拼出 FGCS_AttackResult,交给 RegisterAttackResult 写入可复制 FastArray。复制到达后 HandleAttackResult 按各 Processor 的 Default / LocalPredicted / ServerOnly 策略执行。

基类 HandleGameplayEffectExecute 的默认实现是空的,插件也不会自动调用它。项目必须把 GGA 的 PostExecute 转到 Flow,并在子类里注册结果,否则 Processor 不会跑。第一次接线见 注册第一条攻击结果。死亡 Processor 同样是空占位,死亡表现由项目实现。

怎么接着读

第一次接入建议先看 系统边界与扩展范围,再对照 快速开始 或 观察配套项目。已经知道要做近战、远程或连击时,可以直接进入对应能力线,再从页尾跳到操作指南。

系统边界与扩展范围

GCS 解决的是“GAS 和技能已经能跑,但近战窗口、子弹、锁定和受击还要在角色蓝图里手写”的问题。它把攻击请求、命中、攻击结果和 Processor 收成组件与数据表;伤害公式、死亡演出、动画资源和 UI 仍由项目完成。

相关文档:接入步骤见 快速开始,组件挂载见 挂上战斗组件。

产品交付与插件模块

Fab 产品会把 Generic Input System(GIPS)、GenericGameplayAbilities(GGA)和 GenericCombatSystem 一并交付。买家用这三层拼出“按键 → 技能 → 命中结算”。配套项目用来观察现成关卡,插件包本体 CanContainContent 为 false。

GCS 插件只有一个 Runtime 模块 GenericCombatSystem。.uplugin 硬依赖 GGA,以及引擎侧 EnhancedInput、GameplayAbilities、ModularGameplay、TargetingSystem、StateTree、GameplayStateTree、MotionWarping。GIPS 出现在产品组合里,不在本插件的 .uplugin 依赖表上。StateTree 与 MotionWarping 写在依赖里,GCS 运行时源码没有直接调用它们的 API。

三层谁管什么

层

谁管

典型入口

输入缓冲、按键映射、带标签的动作窗口

GIPS(产品附带)

输入 Setup、缓冲窗口

技能授予、属性、Effect Container、标签互斥

GGA

UGGA_AbilitySystemComponent、UGGA_AbilitySet

攻击请求、Trace / 子弹命中、Attack Result、锁定与阵营

GCS

UGCS_CombatSystemComponent、UGCS_CombatFlow

战斗技能基类 UGCS_CombatAbility 继承 UGGA_GameplayAbility。Combat Flow 吃的属性回调类型是 GGA 的 FGGA_GameplayEffectModCallbackData。把 Ability System Globals 指到 UGGA_AbilitySystemGlobals,Effect Context Payload 和这条回调才会按预期分配。

输入如何激活战斗 Ability,按 GIPS 或项目自己的 Enhanced Input 绑定处理。GCS 不封装 Input Action 或 Mapping Context。

插件提供、项目必须自己写

GCS 提供可复制的韧性属性集 UAS_Poise(Poise / MaxPoise / PoiseRecover),作为可选起点。项目可以授予它,也可以用自己的 AttributeSet。插件不强制任何伤害公式。

项目继续掌握:

  • 伤害数字怎么从 SetByCaller、Capture 或 Execution 算出来。
  • 死亡:内置 UGCS_AttackResultProcessor_Death 的默认实现是空的,真正的 StartDeath / FinishDeath 写在战斗实体或项目 Processor 里。
  • 动画 Montage、命中停顿的具体资源,以及 HUD、伤害飘字。
  • UGCS_AbilityActionSetSettings 这份 DataAsset 里的动作行如何映射到 Montage;它不是 Developer Settings。

开发者设置类现名 UGCS_DeveloperSettings,常用两项是 CharacterMeshLookupTag(默认查找主网格的组件 Tag)和仅供调试的 bDisableAffiliationCheck。

一个具体场景

第三人称角色用 GIPS 缓冲轻击,GGA 授予近战 AbilitySet 和生命属性。GCS 在 Pawn 上挂 Combat、Trace、Targeting 和 Team 组件,Combat Flow 里放 LocalPredicted 的 Cue Processor 和 Default 的受击 Processor。挥砍命中后,GGA 的 Effect 改目标生命;GCS 把同一次 execute 收成 Attack Result,客户端立刻播 Cue,服务器再复制结果给 SimulatedProxy。步枪弹道和近战扫掠都进同一条 Flow。伤害曲线、死亡 Ragdoll 和血条仍在项目蓝图里。