跳转到正文

战斗实体

作

作者

作者

创建时间: 2025年4月15日更新时间: 2026年10月12日

目录

前言

GCS 通过战斗实体接口把战斗逻辑与项目自己的移动、装备和生命周期实现连接起来。UGCS_CombatSystemComponent 是 Actor 上的战斗运行时入口;IGCS_CombatEntityInterface 则提供目标、连招、能力动作、移动状态、死亡处理和武器查询等项目侧能力。

接口可以由 Actor 或其组件实现。使用 UGCS_CombatFunctionLibrary::GetCombatEntityInterface 获取接口;它优先检查 Actor 本身,再检查其组件。UGCS_CombatFunctionLibrary::FindCombatInterface 使用同样的查找顺序并返回是否找到。若项目把接口放在组件上,战斗 Ability 可以通过这些助手访问实现对象,而不依赖具体角色类。

Note

自GCS1.5开始,CombatInterface已经重命名为CombatEntityInterface。

设计图

接口职责

当前 IGCS_CombatEntityInterface 将常用的 Actor 能力归为以下几类:

  • 目标与战斗数据:获取当前目标 Actor 或目标 SceneComponent、获取 ComboDefinition DataTable、按上下文与标签查询 AbilityAction,以及按 TagQuery 查询武器。
  • 移动与输入:读写 RotationMode、MovementSet 和 MovementState 标签,并查询 MovementIntent。
  • 生命周期:启动死亡流程、完成死亡流程,以及查询是否已死亡。
  • 武器与挂点:查询或设置当前使用的武器,并获取网格相对 Socket 的变换,用于对齐武器挂点或子弹生成姿态。

SetCurrentWeapon 用于标记下一项动作将使用哪把武器;实际的装备切换仍由项目自己的装备系统完成。目标接口通常会从 UGCS_TargetingSystemComponent 读取当前锁定目标。

默认实现与项目集成

示例实现展示了如何把移动状态和装备选择映射到项目组件。接入已有项目时,在自己的 Actor 或组件中实现该接口,并由接口函数调用项目的移动、装备和死亡逻辑。这样战斗 Ability 可以调用稳定的接口,集成代码则负责适配具体系统。

如果项目使用通用运动系统,可以在接口实现中把 GCS 的移动状态与旋转模式映射到该系统。

实现战斗实体接口

接口函数带有 BlueprintNativeEvent,可由 Blueprint 或 C++ 实现。Actor 和组件都支持实现接口;将实现放在职责清晰的组件中,通常更便于替换和维护。

使用战斗实体接口

调用 GetCombatEntityInterface 获取 Actor 或其组件上的接口。如果接口实现是可选的,先调用 FindCombatInterface 并处理未找到的情况。Actor 自身实现接口时会优先返回 Actor;否则返回找到的第一个组件实现。

使用案例:移动能力

Sprint 示例展示了如何让 Ability 在开始和结束奔跑时调用战斗实体接口,而由接口实现负责更新项目的移动状态。Ability 因此不需要直接依赖某个具体的 MovementComponent。

以 SetRotationMode 为例,Ability 通过标签表达期望的旋转模式,接口实现再把它映射到项目的移动组件。

这种接法让 Ability 保持可复用,也便于在项目更换移动实现或扩展新的状态标签时集中调整接口适配逻辑。