0. 개요
아직 게임플레이 이펙트(Gameplay Effects)에 대해 배우지 않았으므로 해당 기능 없이 속성에 직접 접근하는 방법이 필요하다.
Get 함수 또는 Set 함수를 만들지 않고 접근하는 방법을 사용한다.
1. 사용
(1) AuraAttributeSet.h
// 서버에서 변수 변경 -> 클라이언트에서 OnRep_Notify 발동
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Health, Category = "Vital Attributes")
FGameplayAttributeData Health;
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(UAuraAttributeSet, Health);
GAMEPLAYATTRIBUTE_PROPERTY_GETTER 매크로를 이용하여 GetHealth 함수, SetHealth 함수, InitHealth 함수를 생성한다.
(2) 속성 접근자 매크로
AuraAttributeSet.h의 상단에 매크로를 추가한다.
#include "CoreMinimal.h"
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "AuraAttributeSet.generated.h"
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
이제 이 매크로를 사용해 속성 값의 getter, setter, initter를 사용할 수 있다.
Initter는 Setter와 작동 방식이 약간 다르다. Initter는 속성의 값을 기본 값( Base Value)로 즉시 변화시킨다.
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Health, Category = "Vital Attributes")
FGameplayAttributeData Health;
ATTRIBUTE_ACCESSORS(UAuraAttributeSet, Health);
이제 Health 속성에 해당 매크로를 추가하면, 생성자에서 다음과 같이 변수를 초기화하여 사용할 수 있다.
UAuraAttributeSet::UAuraAttributeSet()
{
InitHealth(100.f);
}
이는 매크로가 InitHealth 함수를 자동으로 생성했기 때문이다.
(3) 디버그
이제 VS Code에서 DebugGame 모드로 컴파일하여 디버그를 실행한다.
- 소유자 액터(Owner Actor)가 PlayerState라는 것과 아바타 액터(Avatar Actor)가 AuraCharacter임을 알 수 있다.
- 캐릭터가 보유한 게임플레이 태그(Gameplay Tags)를 확인할 수 있다.
- 좌측 하단에 체력, 최대 체력, 마나, 최대 마나의 값이 나타나는 것이 보인다. 생성자에서 초기화한 속성 값이 정상적으로 적용된 것을 볼 수 있다.
- 페이지 업 다운으로 대상을 변경할 수 있다.
일반적으로 게임플레이 이펙트(Gameplay Effects)를 사용하고, 위의 Get, Set, Init 함수는 잘 사용하지 않음에 유의한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
3-1. RPG 게임 기본 UI 구조 (0) | 2024.08.21 |
---|---|
2-9. 이펙트 액터(Effect Actor) (0) | 2024.08.20 |
2-7. 속성(Attributes) & 속성 세트(Attributes Set) (0) | 2024.08.20 |
2-6. 어빌리티 액터 정보(Ability Actor Info) 초기화하기 (0) | 2024.08.14 |
2-5. 복제 모드(Replication Mode) (0) | 2024.08.14 |