UE(GAS) - DECLARE_ATTRIBUTE_CAPTUREDEF(), DEFINE_ATTRIBUTE_CAPTUREDEF()
DECLARE_ATTRIBUTE_CAPTUREDEF()
DECLARE_ATTRIBUTE_CAPTUREDEF는 Unreal Engine의 **Gameplay Ability System (GAS)**에서 사용되는 매크로로, GameplayEffectExecutionCalculation 클래스에서 특정 Gameplay Attribute를 캡처하는 데 사용됩니다. 이 매크로는 효과를 계산할 때 필요한 속성(Attribute) 값을 효율적으로 가져올 수 있게 도와줍니다.
주요 개념
- Gameplay Attribute:
- Gameplay Attribute는 캐릭터의 건강, 마나, 힘 등의 스탯을 나타냅니다. GAS 시스템에서 속성들은 FGameplayAttribute 클래스로 정의됩니다.
- Capture:
- Capture는 특정 Gameplay Attribute의 현재 값을 계산 시점에 가져오는 과정입니다. 이를 통해, GameplayEffectExecutionCalculation에서 속성을 기반으로 한 복잡한 계산을 수행할 수 있습니다.
- Execution Calculation:
- GameplayEffectExecutionCalculation은 복잡한 로직을 통해 Gameplay Effect를 처리하는 클래스입니다. 이 클래스에서 속성 값을 가져오기 위해 DECLARE_ATTRIBUTE_CAPTUREDEF 매크로를 사용합니다.
DECLARE_ATTRIBUTE_CAPTUREDEF 매크로
DECLARE_ATTRIBUTE_CAPTUREDEF 매크로는 특정 속성을 캡처하는 데 필요한 정의를 선언합니다. 이 매크로는 주로 클래스의 헤더 파일에서 선언됩니다.
매크로 사용 예시
1
|
DECLARE_ATTRIBUTE_CAPTUREDEF(Health);
|
cs |
이 매크로는 Health라는 이름의 속성을 캡처하기 위해 필요한 정의를 생성합니다. 이 선언은 캡처된 값을 나중에 GameplayEffectExecutionCalculation에서 접근할 수 있도록 합니다.
매크로의 내부 작동 방식
매크로를 선언하면, CaptureDefinition이라는 이름으로 FGameplayEffectAttributeCaptureDefinition 구조체가 생성됩니다. 이 구조체는 속성의 정보를 캡처하기 위해 필요한 모든 데이터를 포함합니다.
1
2
|
#define DECLARE_ATTRIBUTE_CAPTUREDEF(Attribute) \
FGameplayEffectAttributeCaptureDefinition Attribute##Def;
|
cs |
사용 방법
- 속성 캡처 선언:
- DECLARE_ATTRIBUTE_CAPTUREDEF 매크로는 UGameplayEffectExecutionCalculation 클래스의 헤더 파일에서 선언됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
UCLASS()
class UMyGameplayEffectExecutionCalculation : public UGameplayEffectExecutionCalculation
{
GENERATED_BODY()
public:
UMyGameplayEffectExecutionCalculation();
protected:
// 속성 캡처 선언
DECLARE_ATTRIBUTE_CAPTUREDEF(Health);
DECLARE_ATTRIBUTE_CAPTUREDEF(Strength);
};
|
cs |
캡처 설정:
- UGameplayEffectExecutionCalculation 클래스의 생성자에서 캡처할 속성을 설정합니다.
1
2
3
4
5
6
|
UMyGameplayEffectExecutionCalculation::UMyGameplayEffectExecutionCalculation()
{
// 속성 캡처 초기화
RelevantAttributesToCapture.Add(HealthDef);
RelevantAttributesToCapture.Add(StrengthDef);
}
|
cs |
속성 값을 가져오기:
- Execute_Implementation 함수에서 캡처된 속성 값을 사용하여 계산을 수행합니다
1
2
3
4
5
6
7
8
9
10
|
void UMyGameplayEffectExecutionCalculation::Execute_Implementation(
const FGameplayEffectCustomExecutionParameters& ExecutionParams,
OUT FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const
{
// 속성 값 가져오기
float HealthValue = 0.0f;
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(HealthDef, FAggregatorEvaluateParameters(), HealthValue);
// 계산 로직
}
|
cs |
DEFINE_ATTRIBUTE_CAPTUREDEF()
DEFINE_ATTRIBUTE_CAPTUREDEF는 DECLARE_ATTRIBUTE_CAPTUREDEF와 함께 사용되는 매크로로, **Gameplay Ability System (GAS)**에서 Gameplay Attribute를 캡처할 때 필요한 정의를 초기화하는 역할을 합니다. 이 매크로는 주어진 속성에 대한 캡처 정의를 생성하고, 이를 통해 이후에 해당 속성을 쉽게 사용할 수 있게 합니다.
1
2
3
4
5
|
#define DEFINE_ATTRIBUTE_CAPTUREDEF(S, P, T, B) \
{ \
P##Property = FindFieldChecked<FProperty>(S::StaticClass(), GET_MEMBER_NAME_CHECKED(S, P)); \
P##Def = FGameplayEffectAttributeCaptureDefinition(P##Property, EGameplayEffectAttributeCaptureSource::T, B); \
}
|
cs |
매크로의 구성 요소
- 매크로 인자:
- S: 속성을 가진 클래스입니다.
- P: 캡처할 속성(Property)입니다.
- T: 속성 값을 캡처할 때의 소스입니다. 이는 EGameplayEffectAttributeCaptureSource 열거형의 값으로, Source 또는 Target이 될 수 있습니다.
- B: bool 값으로, 이 값이 true이면 이 속성은 캡처된 후에도 지속적으로 업데이트됩니다.
- P##Property:
- 매크로 내부에서 P##Property는 속성의 FProperty 포인터를 저장합니다. ##는 C++의 토큰 결합 연산자로, P와 Property를 결합하여 새로운 식별자를 생성합니다.
- FindFieldChecked<FProperty>(S::StaticClass(), GET_MEMBER_NAME_CHECKED(S, P)):
- FindFieldChecked<FProperty>는 클래스 S에서 속성 P의 FProperty 객체를 찾습니다. 이 함수는 주어진 속성이 존재하지 않을 경우 오류를 발생시킵니다.
- GET_MEMBER_NAME_CHECKED(S, P)는 클래스 S의 멤버 P의 이름을 컴파일 타임에 안전하게 가져옵니다.
- P##Def:
- P##Def는 FGameplayEffectAttributeCaptureDefinition 객체를 생성합니다. 이 객체는 속성의 캡처 방법을 정의하며, 이 매크로를 통해 정의된 속성을 후속 계산에서 사용할 수 있게 합니다.
- FGameplayEffectAttributeCaptureDefinition 생성자:
- 이 생성자는 속성(FProperty), 캡처 소스(EGameplayEffectAttributeCaptureSource), 그리고 지속적 업데이트 여부(bool B)를 인자로 받아 캡처 정의를 초기화합니다.
요약
DECLARE_ATTRIBUTE_CAPTUREDEF 매크로는 Gameplay Ability System에서 Gameplay Attribute를 캡처하기 위한 선언을 간편하게 만드는 도구입니다. 이 매크로를 통해 속성을 쉽게 정의하고, GameplayEffectExecutionCalculation에서 속성 값을 가져와 복잡한 계산을 수행할 수 있습니다. 이 과정은 GAS에서 속성 기반 로직을 구현하는 데 필수적인 역할을 합니다.
DEFINE_ATTRIBUTE_CAPTUREDEF 매크로는 Gameplay Effect Execution Calculation에서 사용할 속성의 캡처 정의를 초기화하는 데 사용됩니다. 이 매크로는 주어진 속성의 정보를 안전하게 가져오고, 이를 기반으로 FGameplayEffectAttributeCaptureDefinition 객체를 생성합니다. 이 매크로는 캡처할 속성을 효율적으로 설정하고, 이후 계산에서 해당 속성을 사용할 수 있도록 합니다.