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 |