概述
GCS 将一次命中的静态数据放在 AttackDefinition 中,再由近战或子弹 AttackRequest 指定何时、以什么方式使用这份数据。一个攻击动作可以在不同命中窗口使用不同请求和攻击定义。
攻击定义
FGCS_AttackDefinition 是 DataTable 行结构,描述单次命中的数据。创建行结构为 FGCS_AttackDefinition 的 DataTable,并为不同攻击阶段、武器或伤害变体建立行。
主要字段
AttackTags:描述攻击特征的 Gameplay Tags。它们会作为动态 Asset Tags 加入 GameplayEffectSpec,供计算和后续处理使用。SetByCallerMagnitudes:以 GameplayTag 为键的浮点数映射,会传入 GameplayEffectSpec,供执行计算等逻辑读取。TargetEffectClass与TargetEffectContainer:分别配置应用于命中目标的 Gameplay Effect 类和效果容器。两者不是互斥选项;只要各自有效,就会分别应用。TargetEffectClassLevel小于 1 时使用 Ability 等级;容器效果等级由 Ability 等级决定。- 命中反馈数据:还可配置目标 Gameplay Cues、
KnockbackDistance、KnockbackMultiplier、HitStallingDuration和HitPlayRateFactor。 - 扩展字段:C++ 使用
NativeExtension扩展结构,蓝图使用Extension实例化结构,以增加项目自己的攻击定义数据。
攻击定义句柄会随 Gameplay Effect 写入 EffectContext,使后续的 CombatFlow 和处理器可以读取关联定义。
管理攻击定义表
可以按武器类别、攻击类型或项目的数据组织习惯拆分 DataTable。近战 AttackRequest 直接保存攻击定义行句柄;子弹则通过 BulletDefinition 引用攻击定义行。
攻击请求
UGCS_AttackRequest_Base 是攻击请求基类,具体请求提供攻击定义句柄。当前有近战与子弹两种请求;它们负责描述一次攻击的参数,不负责独立执行命中处理。
近战攻击
在动画的近战窗口使用 GCS_ANS_AttackTrace 保存 UGCS_AttackRequest_Melee。请求中:
TracesToControl指定攻击窗口要启停的 Trace 标签。AttackDefinitionHandle指向本次命中使用的攻击定义行。
UGCS_ANS_AttackTrace 是请求数据容器,不是运行时 Trace 执行器。Ability/项目逻辑在窗口开始和结束时调用 UGCS_AbilityTask_CollisionTrace 的 AddMeleeRequest / RemoveMeleeRequest。该任务通过 UGCS_TraceSystemComponent 启停 Trace,并通过 OnTargetsFound 将命中信息交回 Ability。
子弹攻击
在子弹攻击中,UGCS_AttackRequest_Bullet 通过 BulletDefinitionHandle 指定子弹定义。BulletDefinition 再通过 AttackDefinition 指定命中使用的攻击定义。
请求还可配置发射与瞄准方式:
TargetingSourceType选择相机、Pawn 或武器的朝向/焦点模式;选择Custom时,需要在 BulletRequest 子类中重写GetTargetingTransform。SourceComponentLookupTagName用于查找来源组件;SourceSocketName、SourceWeaponSocketName和LocationOffset用于设置来源位置。- 启用
bRequireTargeting时,必须提供TargetingPreset。请求可以从来源 Pawn 解析当前战斗目标。
UGCS_ANS_BulletTrace 可在动画中保存 BulletRequest。Ability 的 GameplayEvent 需要把请求放在事件数据的 OptionalObject 中;UGCS_AbilityTask_BulletTrace 监听配置的事件标签,读取请求后调用 UGCS_BulletSystemComponent 生成子弹。
本地预测只用于玩家发起的首批子弹轨迹与视觉表现。预测子弹不会应用 Gameplay Effect;实际命中与效果结算由服务器权威处理。
自定义攻击请求类型
你可以从 UGCS_AttackRequest_Base 派生请求类型,以承载项目需要的额外参数。若 BulletRequest 的 TargetingSourceType 使用 Custom,请从 UGCS_AttackRequest_Bullet 派生并实现 GetTargetingTransform。