UE4/5 GAS技能系统入门2 - AttributeSet

在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类型:

最后调试一下:


参考:https://zhuanlan.zhihu.com/p/486808688

相关推荐
saoys18 分钟前
Opencv 学习笔记:绘制动态随机直线(附实时展示)
笔记·opencv·学习
春日见20 分钟前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
Yeats_Liao34 分钟前
MindSpore开发之路(二十六):系列总结与学习路径展望
人工智能·深度学习·学习·机器学习
modelmd41 分钟前
Go 编程语言指南 练习题目分享
开发语言·学习·golang
HABuo44 分钟前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos
Nan_Shu_6141 小时前
学习: Threejs (2)
前端·javascript·学习
oMcLin1 小时前
如何在 Rocky Linux 8.7 上通过 Prometheus 与 Grafana 结合,提升大规模容器环境的监控与性能分析?
linux·grafana·prometheus
橘颂TA1 小时前
【Linux】死锁四条件的底层逻辑:从锁冲突到 STL 组件的线程安全实践(Ⅵ)
linux·运维·服务器·c++·死锁
埃伊蟹黄面1 小时前
ELF深入解剖:从文件头到动态段,图解库的二进制构成
linux·c·
学历真的很重要1 小时前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain