连击、武器与战斗实体
连击、武器和角色契约是三条互相引用的线。UGCS_ComboAbility 只负责按表选出并激活子 Ability,不改伤害数字。AGCS_WeaponActor 在激活时把 Trace 登记到拥有者,并可带一份连击表。IGCS_CombatEntityInterface 让技能问“当前目标、是否死亡、用哪把武器、连击表在哪”。SetCurrentWeapon 只标记下一招用哪把已经在身上的武器,不负责装备切换。
相关文档:配置步骤见 配置连击与武器,字段见 连击、武器与目标,接口覆写见 接口与自定义实例。
连击 Ability 怎么选招
UGCS_ComboAbility 继承 UGCS_CombatAbility,默认 LocalPredicted 且复制。它从战斗实体取出 GetComboDefinitionTable(),用当前 ComboStep、GameplayEvent 标签、Instigator/Owner TagQuery 和可选的 CanActivateAbility 测试,选出第一行匹配的 FGCS_ComboDefinition,再 TryActivateAbility 那个子技能。选招只在本地控制端做,成功后 UpdateComboStep 经复制和 RPC 对齐到其他端。
行过滤的直观规则:MinComboStep == 0 只当入口;非重置行在当前步骤已经超过 MinComboStep 时被跳过;bResetComboStep 且 MinComboStep > 0 时,选中后把步骤打回入口。CanSelectedComboDefinition 默认 true,可用来读 Extension 里的武器标签。连击 Ability 不写 SetByCaller,也不 Apply 伤害 GE——那些留在被选出的攻击 Ability 和攻击定义上。
ComboStep 存在 Combat 组件上:复制跳过 Owner,所属端用可靠 RPC。Gameplay Debugger 能看到当前步骤。
战斗实体接口
Pawn 或组件实现 IGCS_CombatEntityInterface 后,技能才能问到运行时上下文:
- 目标:
GetCombatTargetActor/GetCombatTargetObject,通常转给 Targeting 组件。 - 生死:
IsDead、StartDeath、FinishDeath。Death Processor 默认不调用它们。 - 武器:
GetCurrentWeapon、SetCurrentWeapon、QueryWeapon。SetCurrentWeapon的注释写明:多把武器可以同时 Active,这里只标记下一动作用哪一把(例如 X 用主手、Y 用副手)。 - 连击表:
GetComboDefinitionTable,没有连击就返回空。 - 移动标签:
Set/GetRotationMode、MovementSet、MovementState,给面向目标或防御姿态用。 - 动作查询:
QueryAbilityActionsByContext按 Ability/Source/Target 标签从项目数据里选出 Montage 一类动作。对应资产类型是 DataAssetUGCS_AbilityActionSetSettings,不是 Developer Settings。
武器接口与 Weapon Actor
IGCS_WeaponInterface 提供拥有者、武器标签、激活、主 Primitive,以及远程用的 GCS_GetTargetingStartTransform。ToggleTrail 只开关视觉拖尾,不是碰撞 Trace。
AGCS_WeaponActor 是可复制的默认实现。bWeaponActive 带 Push 复制;权威端 SetWeaponActive 后走 OnWeaponActiveStateChanged。激活时 RefreshTraceInstance 把 TraceDefinitions 加到拥有者的 UGCS_TraceSystemComponent,源组件默认是带 WeaponMeshTagName 的网格;停用或 EndPlay 时移除句柄。ComboDefinitionTable 是这份武器自己的连击表;战斗实体的 GetComboDefinitionTable 通常返回当前武器这一份。bGiveAbilitiesFromComboDefinitionTable 表达“表内 Ability 随武器走”的创作意图,原生 AGCS_WeaponActor 没有在源码里执行授予,项目仍要用 AbilitySet 或自己的 Give 把子 Ability 放到 ASC 上。
子弹请求的 WeaponForward / WeaponTowardsFocus 会问当前武器要起点。近战窗口仍由 Ability Task Start/Stop 这些已经登记好的 Trace。
一个具体场景
角色同时握着刀和枪,两把武器都可以 bWeaponActive。按下近战键时 SetCurrentWeapon 标刀;UGCS_ComboAbility 收到轻击事件,从表里选出 GA_LightSlash 并激活,Combat 组件的 ComboStep 从 0 到 1。刀激活时已经登记了刀刃 Trace,Slash Ability 只在 Notify 窗口里 Start。换用枪时再 SetCurrentWeapon 标枪,远程 Ability 从武器 Socket 取发射点。背包里把刀换成斧,属于项目装备系统,不走 SetCurrentWeapon。