![a3b0e89e5d0f0d0c4068f494c62b51d3.png](https://img-blog.csdnimg.cn/img_convert/a3b0e89e5d0f0d0c4068f494c62b51d3.png)
大家好,我是刘茗。
ActionRPG示例项目是UE4中一个展示GameplayAbilitySystem的项目。
使用技能系统的第一步,那就是启用 GameplayAbilities 插件并创建属性集类
下文GAS为GameplayAbilitySystem的简称
一、GAS插件启动
目前GAS是作为UE4的一个引擎插件使用的,所以要先去启动。
打开插件设置,找到GameplayAbilities插件启动
![54539c098a43ab55eaf813cb90376b48.png](https://img-blog.csdnimg.cn/img_convert/54539c098a43ab55eaf813cb90376b48.png)
二、代码文件结构
![2f8b3837c16583473f58efebd485f53b.png](https://img-blog.csdnimg.cn/img_convert/2f8b3837c16583473f58efebd485f53b.png)
![37d7f06a04bf5af21212c645d7811764.png](https://img-blog.csdnimg.cn/img_convert/37d7f06a04bf5af21212c645d7811764.png)
![1671c802eba705070c723eec42ff0a3d.png](https://img-blog.csdnimg.cn/img_convert/1671c802eba705070c723eec42ff0a3d.png)
三、按键绑定(PC端)
![2c61cfaff5a503fd0fab9106a024a59d.png](https://img-blog.csdnimg.cn/img_convert/2c61cfaff5a503fd0fab9106a024a59d.png)
普攻:左键
技能:F键(进入坦克)
翻滚:右键
切换武器:鼠标滑轮
道具栏:Tab键
自动挂机:回车
暂停:ESC键
使用道具:R键
道具栏界面,点击右上角的加号可以增加Souls用来购买技能和装备。
![9cdee453a337b32f9748e31a6a89ca7b.png](https://img-blog.csdnimg.cn/img_convert/9cdee453a337b32f9748e31a6a89ca7b.png)
使用GAS需要添加UAbilitySystemComponent,在ActionRPG.Build.cs文件中添加了GAS模块
![5afaef1900d0dfb3670d9b93dabfeebd.png](https://img-blog.csdnimg.cn/img_convert/5afaef1900d0dfb3670d9b93dabfeebd.png)
项目中使用的是派生类URPGAbilitySystemComponent
![deb9ae281094b37bc5513bee8f5c6383.png](https://img-blog.csdnimg.cn/img_convert/deb9ae281094b37bc5513bee8f5c6383.png)
URPGAbilitySystemComponent在ARPGCharacterBase的构造函数中添加:
![4449e1a65f99ef5819b74e41d3597056.png](https://img-blog.csdnimg.cn/img_convert/4449e1a65f99ef5819b74e41d3597056.png)
四、创建属性集
因为此系统仅在C++中支持,因为属性集必须是UAttributeSet的C++子类。
在ARPG项目中,定义了如下属性:
生命、法力、攻击力、防御力、暴击、移动速度等。
![5e2b2f7070aa40a4f17db3f8feace85c.png](https://img-blog.csdnimg.cn/img_convert/5e2b2f7070aa40a4f17db3f8feace85c.png)
这里使用的数据结构是FGameplayAttributeData,它内部存储两个数据:基数值和当前值。
![26d09720f517416d8796a53a93fd6ab1.png](https://img-blog.csdnimg.cn/img_convert/26d09720f517416d8796a53a93fd6ab1.png)
获取/修改通过Get/Set函数
![4309f2d7eb1d9af896fed971677b29ab.png](https://img-blog.csdnimg.cn/img_convert/4309f2d7eb1d9af896fed971677b29ab.png)
UPROPERTY(BlueprintReadOnly, Category = "Damage", ReplicatedUsing = OnRep_DefensePower)
FGameplayAttributeData DefensePower;
ATTRIBUTE_ACCESSORS(URPGAttributeSet, DefensePower)
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName)
这个宏注册了这个属性的4个基础函数
FGameplayAttribute Get##PropertyName##Attribute()
float Get##PropertyName()
void Set##PropertyName
void Init##PropertyName
void URPGAttributeSet::OnRep_Mana()
{
GAMEPLAYATTRIBUTE_REPNOTIFY(URPGAttributeSet, Mana);
}
GAMEPLAYATTRIBUTE_REPNOTIFY这个宏用于RepNotify函数中,在客户端中修改属性
URPGAttributeSet在RPGCharacterBase.h中声明了变量,并作为Character的友元
![5b2cfba9009282539267cba4c9563e13.png](https://img-blog.csdnimg.cn/img_convert/5b2cfba9009282539267cba4c9563e13.png)
![ac3d3dc4123604bc573491fa0b37c1f8.png](https://img-blog.csdnimg.cn/img_convert/ac3d3dc4123604bc573491fa0b37c1f8.png)
// Create the attribute set, this replicates by default
AttributeSet = CreateDefaultSubobject<URPGAttributeSet>(TEXT("AttributeSet"));
在Character的构造函数中,创建了属性集对象
以上是对GAS的第一部分的浅析,感谢阅读!
![0d8b156d94cd06518faeeee1e43510cb.png](https://img-blog.csdnimg.cn/img_convert/0d8b156d94cd06518faeeee1e43510cb.png)