2、示例项目

2. 示例项目

本文档包含了一个支持多人联机的第三人称射击游戏示例项目,主要面向已经熟悉虚幻引擎但刚接触游戏能力系统(GAS)插件的开发者。使用者需要具备C++、蓝图、UMG、Replication等虚幻引擎中级主题的相关知识。该项目展示了如何搭建一个基础的多人第三人称射击游戏,其中:

  • 玩家/AI控制的英雄将能力系统组件 AbilitySystemComponent(简称ASC),放置在PlayerState类中
  • AI控制的小兵将ASC放置在Character类中

本项目的目标是保持简单的同时展示GAS的基础知识,并通过详细注释的代码演示一些常用功能。由于面向入门者,项目不涉及预测投射物(Predicting Projectiles等高级主题。

项目演示的概念包括:

  • PlayerStateCharacter类中使用ASC的区别
  • 网络同步的Attribute
  • 网络同步的Animation Montage(动画蒙太奇)
  • Gameplay Tags(游戏标签系统)
  • GameplayAbility内部和外部添加/移除GameplayEffect
  • 应用被护甲减免的伤害来改变角色生命值
  • GameplayEffect Execution Calculation(游戏效果执行计算)
  • 眩晕效果
  • 死亡和重生
  • 在服务器上通过Ability生成Actor(Projectile投射物)
  • 预测性地改变本地玩家瞄准和冲刺时的速度
  • 持续消耗耐力进行冲刺
  • 使用法力值施放Ability
  • 被动Ability
  • 叠加GameplayEffect
  • 锁定Actor
  • 在蓝图中创建的GameplayAbility
  • 在C++中创建的GameplayAbility
  • 每个Actor实例化的GameplayAbility
  • 非实例化GameplayAbility(跳跃)
  • 静态GameplayCue(开火粒子效果)
  • ActorGameplayCue(冲刺和眩晕特效)

Character(角色)类具有以下能力:

Ability名称输入绑定是否预测实现方式C++/Blueprint描述
跳跃空格键C++使英雄跳跃
开枪鼠标左键C++从英雄的枪中发射投射物。动画可预测但投射物不可预测
瞄准鼠标右键Blueprint蓝图按住按键时,英雄移动变慢,相机放大以提供更精确的射击
冲刺左ShiftBlueprint蓝图按住按键时,英雄以消耗耐力为代价提升移动速度
向前冲锋Q键Blueprint蓝图英雄消耗耐力向前冲锋
被动护甲叠加被动Blueprint蓝图每4秒获得一层护甲,最多4层。受到伤害时失去一层护甲
陨石术R键Blueprint蓝图玩家选择目标位置召唤陨石,对敌人造成伤害和眩晕。目标选择可预测但陨石生成不可预测

GameplayAbility可以用C++或蓝图实现,这里混合使用两种方式来展示不同的实现方法。

AI控制的小兵没有预定义的GameplayAbility。红色小兵具有更高的生命值恢复,而蓝色小兵具有更高的初始生命值。

关于GameplayAbility的命名规则:使用_BP后缀表示该能力的逻辑在蓝图中实现。没有后缀则表示在C++中实现。

蓝图资产命名前缀

前缀资产类型
GA_GameplayAbility
GC_GameplayCue
GE_GameplayEffect