KillKiss Help

상태창

개요

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

이미지

AttributeMenu.png

구조

WBP_AttributeMenu

SizeBox_Root

Overlay_Root

Image_Background

Image_Border

Wrap Box

CloseButton

Primary Values

ScrollBox

Secondary Values

상태창 정보 데이터에셋

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

Attribute Menu Widget Controller에서 델리게이트 생성

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

AttributeMenu_TextValueRow.png

AttributeInfoDelegate가 BroadCast될시 업데이트 되는 Information을 바탕으로 UI를 갱신합니다.

AttributeMenu.uasset

서 각 Row별 Gameplay Tag 부여, 및 초기값 BroadCast

Last modified: 16 December 2024