连击、武器与目标
本页解释连击表如何选招、武器 Actor 如何带着 Trace 和表、以及瞄准组件与队伍 ID 如何复制。概念见 连击、武器与战斗实体、目标与队伍。操作见 配置连击与武器。
FGCS_ComboDefinition
Data Table 行。UGCS_ComboAbility 在本地控制端遍历战斗实体 GetComboDefinitionTable() 返回的表,按当前 ComboStep、事件标签、TagQuery 和可选激活测试选出第一条匹配行,再 TryActivateAbility 子技能。表由战斗实体提供,不是 Combo Ability 自己持有。
生命周期:武器或角色实现 GetComboDefinitionTable → 玩家输入变成 Gameplay Event → StartCombo / AdvanceCombo → SelectComboDefinition → 激活子技能并 UpdateComboStep。子技能结束且没有下一步时 ResetCombo 把步骤清零。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 选中后激活的技能软引用。 | 每一步一个技能类。 | 空引用跳过该行;类没授予到 ASC(且 SourceObject 对得上)也会跳过。 |
| 选中后把步骤重置回入口。仅当 | 连击中的“收招/循环技”。 | 入口行( |
| 步骤门槛。 | 第 2、3 击写成 1、2。 | 全表都是 0 时,一旦步进就再也选不到下一击。 |
| 有值时,传入事件标签必须完全相等。 | 轻击 / 重击走不同行。 | 输入事件标签和这里不一致则整行永不选中。 |
| 有值时,事件的 | 同一按键因发起者状态分流。 | Query 写错会让该行永远失败。 |
| 有值时,Owner ASC 当前标签必须匹配。 | 持刀、姿态、Buff 门闩。 | ASC 缺标签时该行被跳过,看起来像“连不上”。 |
| 选中前先 | 成本不够就不要占这一步。 | 测试读的是已授予的 Spec;没授予会先被“不存在”跳过。 |
| 测试失败时放弃整段连击,而不是继续看下一行。仅在 | 这一步是唯一合法后续。 | 打开后一次 Cost 失败会直接 Reset,不会试备选行。 |
| C++ / 蓝图扩展。 | 按当前武器标签再滤一行。 | 只填扩展、不覆写钩子时,扩展不会改变选招。 |
DevDescription 仅编辑器。选招在本地控制端执行;步骤通过战斗组件复制到其他端。
AGCS_WeaponActor
IGCS_WeaponInterface 的默认 Actor 实现,Abstract,需派生。复制 bWeaponActive。激活时由项目调用 RefreshTraceInstance:在所属 Pawn 的 UGCS_TraceSystemComponent 上按 TraceDefinitions 加 Trace,并把武器自己当作 SourceObject。默认 GetPrimitiveComponent 在所属者上按 WeaponMeshTagName 找网格,不是在武器 Actor 自己身上找。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 武器标签,同时实现 | 主手/副手、刀/枪。 | |
| 激活时创建的 Trace 列表。 | 刀刃、护手。 | 无效定义过不了 |
| 查找网格的 Tag,默认 | 所属者身上挂了带该 Tag 的 Primitive。 | Tag 在武器 Actor 本地而所属者没有时,默认实现返回空,Trace 加不进去。覆写 |
| 创作意图:随这把武器授予表里列出的技能,默认 true。 | 装备即授予连击子技能。 | 原生 Actor 不会在 BeginPlay 里授予。授予要由战斗实体、背包或项目子类完成。只勾选这个布尔值不会给 ASC 加技能。 |
| 与这把武器关联的连击表。 | 每把武器一份连击。 | |
| 是否激活,权威端 | 抽出/收起。 | 默认 |
TraceHandles 是 VisibleInstanceOnly 运行时数组。GCS_GetTargetingStartTransform / GCS_ToggleTargeting / ToggleTrail 是接口钩子:前两个给子弹请求当武器侧原点或瞄准开关,ToggleTrail 只做表现,不是碰撞 Trace。
UGCS_TargetingSystemComponent
锁定与候选搜集组件。Owner 作为 Targeting 的 SourceActor,组件自己作为 SourceObject。TargetedActor 以 COND_OwnerOnly 复制;权威端还会 ClientSetTargetedActor,AutonomousProxy 用 ServerSetTargetedActor 请求。PotentialTargets 不复制,只在权威端和 AutonomousProxy 本地刷新。战斗代码通常经 GetCombatTargetActor 读同一把锁。
字段 | 意图 | 何时调整 | 误配风险 |
|---|---|---|---|
| 搜集和过滤候选的预设。 | 锁敌扇形、距离、阵营。 | 空 Preset 时 |
| Tick 时是否自动刷新候选,默认 true。 | 锁定 UI 要持续更新。 | 关掉后必须手动 |
| 是否异步发起 Targeting 请求,默认 true。 | 同步调试可关掉。 | 异步未完成时读 |
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 列表里按显示名添加。
显示名 | 类 | 职责 | 何时用 | 误配 |
|---|---|---|---|---|
| | 同步或异步 Line Trace,收集到首个阻挡命中;可选在终点生成默认 HitResult。 | 准星正前方一条线。 | 用 Collision Profile 做异步 Trace 不受支持。 |
| | 引擎 Trace Selection 的扩展,从 SourceObject 读 | 技能自己提供 Trace 方向或按等级缩放长度。 | SourceObject 没实现该接口时,扩展数据全是默认值。 |
| | 从绑定的 ShapeComponent 取半径/半高/盒体,再按 None/Add/Multiply 与 Task 默认值组合。 | 瞄准体积跟角色身上的碰撞体走。 | 没有 Shape 时尺寸回退,锁定范围对不上视觉体积。 |
| | TagQuery 匹配则保留( | 只要“可锁定”“精英”。 | Query 为空等于不过滤。 |
| | 战斗实体 | 尸体不应再被锁。 | 实体没实现 |
| | 按 | 锁敌不锁队友。 | Developer Settings 关掉归属检查时此过滤器放行所有人。 |
自定义形状或 Task 见 接口与自定义实例。连击推进钩子见 处理器与战斗钩子。