개요
현재의 속성들을 확인 할 수 있으며, 스텟 배분이 가능한 위젯입니다.
이미지

상태창 정보 데이터에셋
FAttributeInfo 구조체에 해당 정보를 담을 수 있는 데이터 에셋을 생성합니다.
USTRUCT(BlueprintType)
struct FAttributeInfo
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FGameplayTag AttributeTag;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FText AttributeName = FText();
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FText AttributeDescription = FText();
UPROPERTY(BlueprintReadOnly)
float AttributeValue = 0.f;
};
AttributeTag: 이 속성을 식별하는 데 사용되는 게임플레이 태그입니다.
AttributeName: 속성의 표시 이름입니다 (예: "힘", "민첩", "지능").
AttributeDescription: 속성에 대한 설명입니다.
AttributeValue: 속성의 현재 값입니다.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TArray<FAttributeInfo> AttributeInfos;
기능 구현
범용 델리게이트 생성
TMap을 사용하여 FGameplayTag를 키로 하고 함수 포인터를 값으로 가지는 TagsToAttributes 맵을 생성합니다.
template <class T>
using TStaticFuncPtr = typename TBaseStaticDelegateInstance<T, FDefaultDelegateUserPolicy>::FFuncPtr;
TMap<FGameplayTag, TStaticFuncPtr<FGameplayAttribute()>> TagsToAttributes
AttributeSet에서 Attribute 접근 함수 추가
TagsToAttributes에 GameplayTag와 Attribute 접근 함수를 연결합니다.
//~Begin Primary Attribute
TagsToAttributes.Add(KKGameplayTags::Attributes_Primary_Strength, GetStrengthAttribute);
TagsToAttributes.Add(KKGameplayTags::Attributes_Primary_Intelligence, GetIntelligenceAttribute);
TagsToAttributes.Add(KKGameplayTags::Attributes_Primary_Luck, GetLuckAttribute);
TagsToAttributes.Add(KKGameplayTags::Attributes_Primary_DefensePower, GetDefensePowerAttribute);
TagsToAttributes.Add(KKGameplayTags::Attributes_Primary_Vigor, GetVigorAttribute);
//~End Primary Attribute
UI서 전달받은 Attribute 정보를 업데이트하기 위해 FAttributeInfoSignature 델리게이트를 선언합니다.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAttributeInfoSignature, const FAttributeInfo&, Info);
Attribute 정보 Broadcast
TagsToAttributes 맵을 순회하며 Attribute 값을 가져와 AttributeInfoDelegate 통해 Broadcast.
for (const TTuple<FGameplayTag, FGameplayAttribute(*)()>& Pair : AS->TagsToAttributes)
{
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(Pair.Value()).AddLambda(
[this, Pair](const FOnAttributeChangeData& Data)
{
BroadAttributeInfo(Pair.Key, Pair.Value());
}
);
}
블루프린트 노드 구성
TextRowValue.uasset

AttributeInfoDelegate가 BroadCast될시 업데이트 되는 Information을 바탕으로 UI를 갱신합니다.
AttributeMenu.uasset
서 각 Row별 Gameplay Tag 부여, 및 초기값 BroadCast
Last modified: 16 December 2024