找回密码
 立即注册
查看: 521|回复: 2

一、UE4技能系统GAS(GameplayAbilitySystem)新手教程 ...

[复制链接]
发表于 2021-12-1 08:23 | 显示全部楼层 |阅读模式
简介


  • 该文档基于UE 4.26。
  • 该文档的目标是使读者对GAS有一个整体的概念,在阅读源码时更有头绪。
  • 不讨论网络复制,因为我是做单机的,对网络不够熟悉,可翻开其它教程。
GAS(Gameplay Ability System)是虚幻自带的一个插件,是一个角色技能系统框架。该插件默认是关闭的,如需使用则在Plugins中打开该插件。
如果你的游戏中需要较为复杂的技能系统,则可以考虑使用这个插件,GAS具有以下特性:

  • 技能(Ability)可具有等级、消耗、冷却等,可给予(Give)或移除(Remove),适合构建RPG和MOBA类等游戏的角色技能。
  • GAS是基于C++的,配合蓝图设计技能(GameplayAbiltiy)和效果(GameplayEffect)。但纯蓝图项目最好不要使用,因为不能扩展。
  • 完善的网络复制,可用于联机游戏。
  • GAS是一个BETA版的插件,在未来可能会有较大的修改。不过目前的插件功能足够完善和强大,堡垒之夜(Fortnite)中使用的正是GAS。
GAS中的关键类

我们从一个常见的技能出发,看一下技能系统究竟需要承担那些功能。


由此可见,技能系统需要处理主要有:技能的伤害消耗等数据、技能之前互斥关系、动画粒子声音等效果、释放来源和目标、Buff状态。
GAS的重要功能有以下几个关键类承担:

  • AbilitySystemComponent(ASC)
技能系统组件AbilitySystemComponent是整个GAS的核心,用于管理各种技能和处理技能系统的所有交互。该组件附加在需要拥有技能的角色上,并可以把技能赋予角色。

  • GameplayTag
游戏性标签GameplayTag是用于标记、描述Ability和Effect等游戏对象,相当于它们的ID。GameplayTag的内部实现基于虚幻的FName字符串,因此具有高效的查询性能。GameplayTag不仅能用于技能系统,也可以在其它任何地方使用,当需要层级标签的时候。



  • GameplayAbility(GA)
技能GameplayAbility是角色可以使用的能力,比如跳跃、攻击、火球术、次元斩等。创建不同的技能是GAS的一个主要工作。在GA中可以触发不同的技能任务(AbilityTask),它们承担了诸如播放动画、角色移动等持续一段时间的功能。

  • GameplayEffect(GE)
游戏性效果GameplayEffect相当于GAS中的Buff类,用于修改各种数值,一般通过改变自己目标的属性值和标签(GameplayTag)来实现。比如附加伤害、回血、光环、Buff/Debuff等。技能的消耗和冷却通常也是用GE实现。属性集AttributeSet是表示Actor各种属性值的集合,保存在ASC中,是GE的主要作用目标。

  • GameplayCue
游戏性提示GameplayCue类似于GAS中的通知事件,用于触发外部事件,比如播放粒子特效、声音等。
使用GAS

如果需要深入使用GAS,翻看插件源码的步骤是避免不了的。
基本步骤:

  • 启用Gameplay Abilities插件



  • 在项目的Build.cs文件中添加依赖模块



  • 为角色添加AbilitySystemComponent组件
  • 添加GameplayTags,制作AttributeSet、GameplayAbility、GameplayTask、GameplayEffect等,丰富技能库
Action RPG

Action RPG是虚幻提供的一个示例项目,该项目展示了GAS的详细用法,本文档中的各种示例也以该项目为参考。可在“Epic Games Launcher-学习-Games”中下载该项目进行探索和学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-12-1 08:30 | 显示全部楼层
Build.cs文件中添加依赖模块后,导入技能头文件时一直报错无法找到,咋办?
发表于 2021-12-1 08:37 | 显示全部楼层
编辑器外面右键.uproject文件,选择重新生成VS文件试一试
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-23 12:19 , Processed in 0.099023 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表