在GAS系统中对属性进行修改需要用到GE(Gameplay Effect),而这又涉及到AttributeSet这样的概念。
AttributeSet用于描述角色的属性集合,如攻击力、血量、防御力等,与GAS系统整合度较高,本文就来讲一讲AttributeSet的使用。
1.创建AttributeSet C++类
用蓝图也可以继承UAttributeSet创建相关类,但是到GE中并不会读取蓝图AttributeSet的字段并且也没有相关设置选项。
因此,为了能正常读到属性参数,需要通过C++去创建AttributeSet。
这里将AttributeSet命名为MyAttributeSet.h。
MyAttributeSet.h
cpp
#pragma once
#include "CoreMinimal.h"
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "MyAttributeSet.generated.h"
// Uses macros from AttributeSet.h
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
/**
*
*/
UCLASS()
class MYPROJECT2_API UMyAttributeSet : public UAttributeSet
{
GENERATED_BODY()
public:
// Attributes
UPROPERTY(VisibleAnywhere, BlueprintReadWrite);
FGameplayAttributeData Health;
ATTRIBUTE_ACCESSORS(UMyAttributeSet, Health);
UPROPERTY(VisibleAnywhere, BlueprintReadWrite);
FGameplayAttributeData MaxHealth;
ATTRIBUTE_ACCESSORS(UMyAttributeSet, MaxHealth);
};
上述脚本定义了Health和MaxHealth两个属性,无需定义cpp文件,保证相关模块依赖已定义,直接编译即可。
编译后在GE中即可读到相关属性:
2.Attribute Set的数据配置
回到Default Pawn玩家类,检查是否挂载AbilitySystemComponent组件:
选中该组件,设置AttributeSet:
新建一个DataTable,为属性配置初始值,表的类型设置为AttributeMetaData
双击打开配置表,配置初始数据。此处需要注意字段要带上类名,否则不生效 :
回到角色蓝图,添加配置表文件:
3.Attribute Set数据获取
AttributeSet数据不能只通过GE操作,还需要额外拿出来暴露给UI显示。
使用节点 Get Float Attribute from Ability System Component即可获取数据,但似乎只有float类型:
最后调试一下: