开发者设置与战斗数据
本页解释攻击从请求走到 EffectContext、再收成攻击结果时会读到的配置对象。运行链路见 战斗流程与攻击结果 和 攻击定义与请求。
UGCS_DeveloperSettings
项目级 UDeveloperSettings,Config=Game,Details 显示名为 Generic Combat System Developer Settings。用蓝图节点 Get GCS Developer Settings 或 UGCS_DeveloperSettings::Get() 读取。它只提供两条全局查找/调试开关,不持有 Combat Flow、Processor 或攻击表。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 用组件 Tag 找角色主骨骼网格,默认 | 角色网格 Tag 不是 | Tag 对不上时,从角色网格取 Socket 的近战/子弹原点会落到 Actor 原点或空组件。 |
| 调试时关掉阵营过滤,允许跨队伤害和跨队锁定。 | 只在本地验证友军误伤、训练木桩时打开。 | 打包进默认 ini 会让 |
改完后看 DefaultGame.ini 的 [/Script/GenericCombatSystem.GCS_DeveloperSettings]。角色网格 Tag 要和这里一致。
FGCS_AttackDefinition
Data Table 行结构(显示名 GCS Attack Definition)。近战请求、子弹定义和函数库都从这里取“打中之后应用什么”。生命周期是:创作时写进表 → 请求或子弹带上行句柄 → 应用 GE 时把句柄写入 FGCS_ContextPayload_Combat → Combat Flow / Processor 再读回来。
TargetEffectClass 与 TargetEffectContainer 不互斥。两者都有效时各自独立应用,句柄会写进每条 Spec 的 EffectContext。AttackTags 作为动态 AssetTags 追加到 Spec;SetByCallerMagnitudes 只写入 Value > 0 的条目。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 描述这次攻击(近战/远程、劈砍/打击)。 | 处理器或标签关系要按攻击类型分流时。 | 空容器时 Cue / Event Processor 只能靠别的聚合标签匹配。 |
| 给 Spec 填 SetByCaller。 | 伤害修正、力度系数。 | |
| 命中目标上的单个 GE 类(软引用)。 | 一击只改一套属性,例如扣血。 | 软引用未加载则该路 GE 不会建出来。 |
| 上面那个 GE 的等级,默认 1。 | 按技能等级放大效果时。 | 写成 0 会走 Ability 等级;Ability 等级也没设时 Spec 等级会偏弱。 |
| GGA 效果容器,可与 | 伤害 + 状态、或要 TargetingPreset 选目标时。 | 容器无效时只剩单个 GE;两边都空则命中没有结算 GE。 |
| 命中时要在目标上执行的 Cue 标签。 | 受击闪光、材质闪白。 | 内置 GameplayCue Processor 发现这里非空会覆盖 Processor 自己的 Cue 列表。 |
| 击退距离(厘米)与倍率,默认 100 / 1。倍率 ClampMin=1。 | 项目 Processor 或受击 Ability 要从定义读击退时。 | 插件没有内置击退 Processor;只填数字不会自动位移。 |
| 命中顿帧秒数, | 重击需要动画停顿。 | 同样要项目侧读取;没有读取逻辑时改它看不见效果。 |
| 命中动画播放速率因子,Clamp 0.1–0.9,默认 0.1。 | 配合顿帧做慢放。 | 同上,只是定义载荷。 |
| C++ | 原生代码给定义加字段。 | 蓝图读不到这份结构。 |
| 蓝图 | 策划给定义加自定义行数据。 | 类型选错时 |
近战把行句柄放在 UGCS_AttackRequest_Melee;远程把同一行挂在 FGCS_BulletDefinition.AttackDefinition。子弹系统在权威端从定义构建 GE,并调用 AddAttackHandleToGameplayEffectSpec。
攻击请求
UGCS_AttackRequest_Base 是 Abstract、Const、DefaultToInstanced、EditInlineNew 的 UObject 请求。基类 GetAttackDefinitionHandle 为空,具体类型必须给出行句柄。GetAttackDefinition() 按句柄读表,行无效时返回默认空定义。
UGCS_AttackRequest_Melee
动画窗口或 Collision Trace Task 在激活期间带着这份请求。TracesToControl 决定窗口里启停哪些 Trace;AttackDefinitionHandle 指向 FGCS_AttackDefinition 行。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 本窗口要控制的 Trace 标签集合。 | 同一把刀有刀刃/刀尖两条 Trace 时。 | 标签与 |
| 命中后用的攻击定义行。 | 每条近战招式一行。 | 空句柄时 GE 没有攻击上下文,Processor 读不到定义。 |
UGCS_AttackRequest_Bullet
子弹请求额外决定发射原点、朝向和是否先锁目标。GetTargetingTransform / GetWeaponTargetingSourceLocation / GetPawnTargetingSourceLocation 可覆写。CameraTowardsFocus 时不显示 Socket 字段。AI 或不由本地玩家控制的射击走权威生成,跳过本地弹道预测。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 子弹定义行。 | 每种弹种一行。 | 空句柄或行结构不对则不会生成子弹。 |
| 发射变换来源,默认 | 枪口跟手、跟相机或跟锁定目标时。 | |
| 查找来源组件的 Tag。 | 网格不是默认组件时。 | None 时回退到 Pawn/武器默认位置。 |
| 角色或武器 Socket;找不到则回退到来源位置。 | 枪口、弓弦。 | 名字写错会从手或武器原点出弹,看起来像“弹偏”。 |
| 来源位置附加偏移。 | 枪口再往前挪一点。 | 偏移过大子弹会穿进自己的碰撞。 |
| 是否必须先有锁定目标。 | 锁定射击、引导技。 | 打开后 |
| 这次射击自己的 Targeting 预设。 | 不走角色锁定组件、临时扫一轮目标时。 | 空 Preset 且 |
GetAttackDefinitionHandle 转给子弹定义里的 AttackDefinition。结算 GE 仍来自那一行,不是子弹请求上另填一份。
FGCS_AttackResult
Combat Flow 在属性 PostGameplayEffectExecute(以及挂了预测执行组件的本地预测执行)之后产出的一条结果。权威结果进 FGCS_AttackResultContainer FastArray 复制;预测结果先留在本机,等相同 PredictionKey 的权威结果到达后标 bWasPredicated。
字段 | 意图 | 何时出现 | 误配风险 |
|---|---|---|---|
| 与这次攻击相关的可选对象。 | 项目 Flow 把过程对象挂上来。 | 复制后客户端指针可能失效,不要当权威状态。 |
| 带着战斗载荷、HitResult、Causer 的 GE 上下文。 | 每次从属性回调建结果时。 | 没写入攻击定义句柄时 Processor 读到空定义。 |
| 聚合后的来源/目标标签。HandleAttackResult 还会并入载荷里的 | 带 TagRequirement 的 Processor 过滤。 | 来源标签空时带 Query 的 Event/Cue Processor 永不命中。 |
| 本机:结果是否已被消费。不复制。 | Processor 或项目逻辑标记“这条用过了”。 | 已消费的结果不会再进 Processor。 |
| 本机:复制结果已用 PredictionKey 匹配到本地预测。不复制。 | 预测命中对上权威结果后。 | 为 true 时 LocalPredicted Processor 不再跑第二次。 |
| 本机:这条来自 FastArray 复制。不复制。 | 客户端收到权威条目后。 | ServerOnly Processor 看到它会跳过。 |
容器有容量上限(组件构造时默认 10)。它是历史缓冲,不是创作资产。基类 HandleGameplayEffectExecute 是空的,项目 Combat Flow 必须在这里从属性回调填好结果并 RegisterAttackResult。
FGCS_ContextPayload_Combat
挂在 GGA EffectContext 上的战斗载荷。函数库在应用攻击定义时写入表与行名;预测执行组件写入 PredictionKey 和 bIsPredictingContext。Ability System Globals 必须是 GGA 那套,否则这块载荷不会被分配。
字段 | 意图 | 何时写入 | 误配风险 |
|---|---|---|---|
| Spec 正在本地预测执行。 | AutonomousProxy 上预测执行组件跑起来时。 | Default / ServerOnly Processor 看到它会跳过。 |
| 把本地预测结果和权威复制结果配成一对。 | 预测执行组件 | 没写入则复制回来无法标 |
| 攻击定义表和行。 | | 只 Apply GE、不走函数库时 Processor 读不到定义。 |
| 子弹定义表和行。 | 子弹构建 GE 时。 | 近战结果里通常为空,属正常。 |
| 应用 GE 时追加的标签,例如 MMC / Execution。HandleAttackResult 会并进来源标签。 | Flow 的 PreApply 或计算类。 | Event Processor 会把它们并成 Instigator Tags。 |
| 带标签的浮点数组,Cue Processor 可按 Tag 取 Raw/Normalized Magnitude。 | 结算时写入伤害幅度。 | Cue 上的 Magnitude Tag 对不上则幅度为 0。 |
SetTaggedValue / GetTaggedValue 按标签覆盖或读取;未存储时读到 0。
UGCS_AbilityActionSetSettings
DataAsset(显示名 GCS Ability Action Set),不是 Developer Settings,也不是角色组件。战斗实体的 QueryAbilityActionsByContext 通常把当前武器或技能上下文交给这份资产,选出本招要播的 Montage 和可选 Cost GE。
SelectBestAbilityActions(SourceTags, TargetTags, AbilityTags, OutActions):按 ActionSets 里第一条 AbilityTag 能 MatchesAny(AbilityTags) 的集合;再扫 Layered,Source/Target Query 都匹配则用该层 Actions;否则回退到该集合的默认 Actions。没有任何 AbilityTag 匹配则返回 false。
FGCS_AbilityAction
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 要播的 | 每条动作一行。 | 空 Montage 仍可能被选中,技能播完没有动画。 |
| 播放速率,默认 1。 | 同一 Montage 快/慢版本。 | 过低会拉长 Trace 窗口,看起来像“判定拖尾”。 |
| 选出这条动作时要应用的 Cost GE。 | 不同动作耗不同体力。 | 只配在动作上、技能自己的 Cost 又配一份,会扣两次。 |
| C++ | 原生给动作加字段。 | 蓝图 InstancedStruct 不在这个字段上。 |
同一集合里还可以配 StartSection、bStopWhenAbilityEnds、根运动缩放。Layered 用 Source/Target TagQuery 覆盖默认 Actions,适合“对空中目标播另一段”。
UGCS_GEComponent_PredictivelyExecute
挂在瞬时 Gameplay Effect 上的 Effect Component。AutonomousProxy 本地 Apply 时:先把当前 PredictionKey 写入战斗载荷,再标 bIsPredictingContext,然后 PredictivelyExecuteEffectSpec。本地属性回调因此也会进 Combat Flow,产出一条预测版 FGCS_AttackResult。
字段 | 意图 | 何时打开 | 误配风险 |
|---|---|---|---|
| 预测执行时是否同时预测 Cue。 | 受击闪光必须在本地立刻看见。 | 打开后仍要让 Cue Processor 走 |
子弹的本地预测只预测弹道和表现,不会走这条 GE 预测。近战要本地受击反馈时,把本组件加在目标 Instant GE 上,并让对应 Processor 遵守 ExecutePolicy。详见 处理器与战斗钩子。