阵营/队伍集成

前言
一款战斗游戏基本上都会存在阵营关系用于决定敌我或者友军。尤其是在战斗伤害计算过程中,需要区分敌我。
UnrealEngine内置GenericTeamAgentInterface是主流的处理这种敌我关系的接口,并且AIController默认实现该接口。同时大多数内置的AI系统(比如感知系统)都强依赖此接口。
不幸的是它并没有暴露给蓝图,同时,不同的项目基本上都需要在其他的Actor上实现GenericTeamAgent接口。
因此,通用战斗系统也提供了这类问题的解决方案,且它是可拔插的,GCS不强制你使用它,并提供轻松的方式将这一机制委托给其它系统或者你自己的实现。
设计图

提供的接口与组件
GCS提供了一个接口:GCS_CombatTeamAgentInterface
该接口允许你通过蓝图/C++在Actor或者组件上实现该接口,并允许你从该接口上设置和获取CombatTeamId(类型为Unreal内置的GenericTeamId)。
同时它还提供了一个该接口的组件形式的默认实现:GCS_CombatTeamAgentComponent
接口的使用
所有GCS提供的参考内容中,都通过一个静态函数"GetCombatTeamAgentInteface"从Actor(或其第一个实现该接口的组件)获取TeamAgentInterface,并用此接口来决定两个Actor之间的关系。如:是否A可以伤害B,获取目标时是否过滤友方等。
组件的使用
只需要挂载该组件到与战斗系统组件共存的Actor上即可,并为其设置默认的TeamId。

该组件还提供队伍变化的事件,因此你可以根据队伍变化,为武器或者角色的服装更新视觉表现,如颜色上区分红蓝。
自带的武器检测逻辑会通过此组件进行队伍判断,因此你为玩家和AI设置不同的TeamId,这样它们才能击中对方。
自定义实现
如果你不希望使用默认提供的组件(比如你已经拥有一个AI系统处理了阵营关系)
你也可以自由地选择在你的其他Actor或者组件上实现该接口,它非常灵活。