(AttributeSet의 이름).(Attribute의 이름) 의 형태를 따라야 한다.디테일 패널의 항목 이름이 왜 AttributeSet이 아니라 Attribute Test인가? 했는데
아직 개발 중인 기능이라는 내용이 코드 주석으로 표기되어 있어서 그런듯 하다.
USTRUCT(BlueprintType)
struct GAMEPLAYABILITIES_API FAttributeMetaData : public FTableRowBase
{
GENERATED_USTRUCT_BODY()
public:
FAttributeMetaData();
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
float BaseValue;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
float MinValue;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
float MaxValue;
UPROPERTY()
FString DerivedAttributeInfo;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gameplay Attribute")
bool bCanStack;
};
GameplayEffect를 통해 Attribute를 초기화 하는 방법
캐릭터 클래스에 GameplayEffect 변수를 생성하고,
캐릭터 초기화 관련 함수에서 GameplayEffect를 적용해주면 된다.
```c++
// AuraCharacterBase.h
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Attributes")
TSubclassOf<UGameplayEffect> DefaultPrimaryAttributes;
void InitializePrimaryAttributes() const;
// AuraCharacterBase.cpp
void AAuraCharacterBase::InitializePrimaryAttributes() const
{
check(GetAbilitySystemComponent());
check(DefaultPrimaryAttributes);
FGameplayEffectContextHandle EffectContext = GetAbilitySystemComponent()->MakeEffectContext();
FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(DefaultPrimaryAttributes, 1, EffectContext);
if (SpecHandle.IsValid())
{
AbilitySystemComponent->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
}
}
```
사용할 GameplayEffect는 에디터에서 생성해주면 되는데,
이 때 초기화 할 Attribute에 맞게 Modifier를 적절히 세팅해주면 된다.
Modifier 옵션은 Add가 아니라 Override로 하는 것이 편리하다.