跳转到正文

连击、武器与目标

作

作者

作者

创建时间: 2026年10月21日更新时间: 2026年10月21日

目录

连击、武器与目标

本页解释连击表如何选招、武器 Actor 如何带着 Trace 和表、以及瞄准组件与队伍 ID 如何复制。概念见 连击、武器与战斗实体、目标与队伍。操作见 配置连击与武器。

FGCS_ComboDefinition

Data Table 行。UGCS_ComboAbility 在本地控制端遍历战斗实体 GetComboDefinitionTable() 返回的表,按当前 ComboStep、事件标签、TagQuery 和可选激活测试选出第一条匹配行,再 TryActivateAbility 子技能。表由战斗实体提供,不是 Combo Ability 自己持有。

生命周期:武器或角色实现 GetComboDefinitionTable → 玩家输入变成 Gameplay Event → StartCombo / AdvanceCombo → SelectComboDefinition → 激活子技能并 UpdateComboStep。子技能结束且没有下一步时 ResetCombo 把步骤清零。

字段

意图

何时调整

误配风险

AbilityClass

选中后激活的技能软引用。

每一步一个技能类。

空引用跳过该行;类没授予到 ASC(且 SourceObject 对得上)也会跳过。

bResetComboStep

选中后把步骤重置回入口。仅当 MinComboStep > 0 且当前不是 step 0 起步时生效。

连击中的“收招/循环技”。

入口行(MinComboStep == 0)上勾选无效。

MinComboStep

步骤门槛。0 只在 step 0 可选。非重置行在当前步骤超过该值后被跳过。

第 2、3 击写成 1、2。

全表都是 0 时,一旦步进就再也选不到下一击。

EventTag

有值时,传入事件标签必须完全相等。

轻击 / 重击走不同行。

输入事件标签和这里不一致则整行永不选中。

EventInstigatorTagQuery

有值时,事件的 InstigatorTags 必须匹配。

同一按键因发起者状态分流。

Query 写错会让该行永远失败。

TagQuery

有值时,Owner ASC 当前标签必须匹配。

持刀、姿态、Buff 门闩。

ASC 缺标签时该行被跳过,看起来像“连不上”。

bRunActivationTest

选中前先 CanActivateAbility。

成本不够就不要占这一步。

测试读的是已授予的 Spec;没授予会先被“不存在”跳过。

bAbortIfActivationTestFailed

测试失败时放弃整段连击,而不是继续看下一行。仅在 bRunActivationTest 时显示。

这一步是唯一合法后续。

打开后一次 Cost 失败会直接 Reset,不会试备选行。

NativeExtension / Extension

C++ / 蓝图扩展。CanSelectedComboDefinition 可读取。

按当前武器标签再滤一行。

只填扩展、不覆写钩子时,扩展不会改变选招。

DevDescription 仅编辑器。选招在本地控制端执行;步骤通过战斗组件复制到其他端。

AGCS_WeaponActor

IGCS_WeaponInterface 的默认 Actor 实现,Abstract,需派生。复制 bWeaponActive。激活时由项目调用 RefreshTraceInstance:在所属 Pawn 的 UGCS_TraceSystemComponent 上按 TraceDefinitions 加 Trace,并把武器自己当作 SourceObject。默认 GetPrimitiveComponent 在所属者上按 WeaponMeshTagName 找网格,不是在武器 Actor 自己身上找。

字段

意图

何时调整

误配风险

WeaponTags

武器标签,同时实现 IGameplayTagAssetInterface。

主手/副手、刀/枪。

QueryWeapon 的 Query 对不上就拿不到这把武器。

TraceDefinitions

激活时创建的 Trace 列表。

刀刃、护手。

无效定义过不了 IsDataValid;缺少 Trace 组件则 Refresh 只打 Warning。

WeaponMeshTagName

查找网格的 Tag,默认 WeaponMesh。

所属者身上挂了带该 Tag 的 Primitive。

Tag 在武器 Actor 本地而所属者没有时,默认实现返回空,Trace 加不进去。覆写 GetPrimitiveComponent / GetSourceComponentForTrace。

bGiveAbilitiesFromComboDefinitionTable

创作意图:随这把武器授予表里列出的技能,默认 true。

装备即授予连击子技能。

原生 Actor 不会在 BeginPlay 里授予。授予要由战斗实体、背包或项目子类完成。只勾选这个布尔值不会给 ASC 加技能。

ComboDefinitionTable

与这把武器关联的连击表。

每把武器一份连击。

UGCS_ComboAbility 读的是 IGCS_CombatEntityInterface::GetComboDefinitionTable()。实体实现应返回当前武器的这张表,否则选招报 “No combo definition table”。

bWeaponActive

是否激活,权威端 SetWeaponActive 写入并复制。

抽出/收起。

默认 OnWeaponActiveStateChanged 只广播委托,不会自动 RefreshTraceInstance。激活后要自己刷新,否则刀在手里却没有判定。

TraceHandles 是 VisibleInstanceOnly 运行时数组。GCS_GetTargetingStartTransform / GCS_ToggleTargeting / ToggleTrail 是接口钩子:前两个给子弹请求当武器侧原点或瞄准开关,ToggleTrail 只做表现,不是碰撞 Trace。

UGCS_TargetingSystemComponent

锁定与候选搜集组件。Owner 作为 Targeting 的 SourceActor,组件自己作为 SourceObject。TargetedActor 以 COND_OwnerOnly 复制;权威端还会 ClientSetTargetedActor,AutonomousProxy 用 ServerSetTargetedActor 请求。PotentialTargets 不复制,只在权威端和 AutonomousProxy 本地刷新。战斗代码通常经 GetCombatTargetActor 读同一把锁。

字段

意图

何时调整

误配风险

TargetingPreset

搜集和过滤候选的预设。

锁敌扇形、距离、阵营。

空 Preset 时 RefreshPotentialTargets 得不到候选人,SearchForActorToTarget 空转。

bAutoUpdatePotentialTargets

Tick 时是否自动刷新候选,默认 true。

锁定 UI 要持续更新。

关掉后必须手动 RefreshPotentialTargets / SearchForActorToTarget,当前目标死亡也不会自动解锁。

bUseAsyncTargeting

是否异步发起 Targeting 请求,默认 true。

同步调试可关掉。

异步未完成时读 PotentialTargets 可能是上一帧。

CanBeTargeted 可覆写。StaticSwitchToNewTarget 按左右方向在候选人里切换。子弹请求的 GetTargetActor 和 Emitter 的 TargetingSystem 都可能读这把锁。不要在 SimulatedProxy 上改 TargetedActor 当权威锁定。

队伍:FGenericTeamId

UGCS_CombatTeamAgentComponent 实现 IGCS_CombatTeamAgentInterface,复制 CombatTeamId。SetCombatTeamId 仅权威。bAssignTeamIdToController 默认 true:权威端还会把同一 ID 写到所属 Controller(若其实现了队伍接口)。GCS:FilterTask (Affiliation) 默认先看 CombatTeam 接口,再回退 GenericTeam 接口。TeamId 255 视为未分队;过滤器默认忽略未分队目标。调试跨队时用 UGCS_DeveloperSettings::bDisableAffiliationCheck,不要在发版配置里改队伍 ID。

内置 Targeting Task

在 TargetingPreset 的 Selection / Filter 列表里按显示名添加。

显示名

类

职责

何时用

误配

GCS:SelectionTask (Line Trace)

UGCS_TargetingSelectionTask_LineTrace

同步或异步 Line Trace,收集到首个阻挡命中;可选在终点生成默认 HitResult。

准星正前方一条线。

用 Collision Profile 做异步 Trace 不受支持。

GCS:SelectionTask (Trace)

UGCS_TargetingSelectionTask_TraceExt

引擎 Trace Selection 的扩展,从 SourceObject 读 IGCS_TargetingSourceInterface(等级、方向、忽略列表)。

技能自己提供 Trace 方向或按等级缩放长度。

SourceObject 没实现该接口时,扩展数据全是默认值。

GCS:SelectionTask (Trace Bind Shape)

UGCS_TargetingSelectionTask_TraceExt_BindShape

从绑定的 ShapeComponent 取半径/半高/盒体,再按 None/Add/Multiply 与 Task 默认值组合。

瞄准体积跟角色身上的碰撞体走。

没有 Shape 时尺寸回退,锁定范围对不上视觉体积。

GCS:FilterTask (TagsRequirements)

UGCS_TargetingFilterTask_TagsRequirements

TagQuery 匹配则保留(bInvert 反过来)。可回退 IGameplayTagAssetInterface。

只要“可锁定”“精英”。

Query 为空等于不过滤。

GCS:FilterTask (IsDead)

UGCS_TargetingFilterTask_IsDead

战斗实体 IsDead() 为真则滤掉。没实现接口不过滤。

尸体不应再被锁。

实体没实现 IsDead 时死人仍留在列表里。

GCS:FilterTask (Affiliation)

UGCS_TargetingFilterTask_Affiliation

按 FAISenseAffiliationFilter 过滤敌/友/中立。

锁敌不锁队友。

Developer Settings 关掉归属检查时此过滤器放行所有人。

自定义形状或 Task 见 接口与自定义实例。连击推进钩子见 处理器与战斗钩子。