2. 示例项目
本文档包含了一个支持多人联机的第三人称射击游戏示例项目,主要面向已经熟悉虚幻引擎但刚接触游戏能力系统(GAS)插件的开发者。使用者需要具备C++、蓝图、UMG、Replication等虚幻引擎中级主题的相关知识。该项目展示了如何搭建一个基础的多人第三人称射击游戏,其中:
- 玩家/AI控制的英雄将
能力系统组件 AbilitySystemComponent(简称ASC),放置在PlayerState类中 - AI控制的小兵将
ASC放置在Character类中
本项目的目标是保持简单的同时展示GAS的基础知识,并通过详细注释的代码演示一些常用功能。由于面向入门者,项目不涉及预测投射物(Predicting Projectiles)等高级主题。
项目演示的概念包括:
- 在
PlayerState和Character类中使用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(开火粒子效果) - Actor
GameplayCue(冲刺和眩晕特效)
Character(角色)类具有以下能力:
Ability名称 | 输入绑定 | 是否预测 | 实现方式C++/Blueprint | 描述 |
|---|---|---|---|---|
| 跳跃 | 空格键 | 是 | C++ | 使英雄跳跃 |
| 开枪 | 鼠标左键 | 否 | C++ | 从英雄的枪中发射投射物。动画可预测但投射物不可预测 |
| 瞄准 | 鼠标右键 | 是 | Blueprint蓝图 | 按住按键时,英雄移动变慢,相机放大以提供更精确的射击 |
| 冲刺 | 左Shift | 是 | Blueprint蓝图 | 按住按键时,英雄以消耗耐力为代价提升移动速度 |
| 向前冲锋 | Q键 | 是 | Blueprint蓝图 | 英雄消耗耐力向前冲锋 |
| 被动护甲叠加 | 被动 | 否 | Blueprint蓝图 | 每4秒获得一层护甲,最多4层。受到伤害时失去一层护甲 |
| 陨石术 | R键 | 否 | Blueprint蓝图 | 玩家选择目标位置召唤陨石,对敌人造成伤害和眩晕。目标选择可预测但陨石生成不可预测 |
GameplayAbility可以用C++或蓝图实现,这里混合使用两种方式来展示不同的实现方法。
AI控制的小兵没有预定义的GameplayAbility。红色小兵具有更高的生命值恢复,而蓝色小兵具有更高的初始生命值。
关于GameplayAbility的命名规则:使用_BP后缀表示该能力的逻辑在蓝图中实现。没有后缀则表示在C++中实现。
蓝图资产命名前缀
| 前缀 | 资产类型 |
|---|---|
| GA_ | GameplayAbility |
| GC_ | GameplayCue |
| GE_ | GameplayEffect |