0. 개요
이전 포스트에서 위젯 컨트롤러를 생성하여 위젯과 연결했다.
이제 위젯에 속성 정보(Attribute Info) 구조체를 전달하는 델리게이트를 생성한다.
1. 델리게이트 생성 - AttributeMenuWidgetController
이제 이전에 생성했던 속성 정보 구조체(Attribute Info)를 위젯에 전달하기 위해 델리게이트를 바인딩한다.
(1) 코드
#pragma once
#include "CoreMinimal.h"
#include "UI/WidgetController/AuraWidgetController.h"
#include "AttributeMenuWidgetController.generated.h"
struct FAuraAttributeInfo;
class UAttributeInfo;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FAttributeInfoSignature, const FAuraAttributeInfo&, Info);
UCLASS(BlueprintType, Blueprintable)
class AURA_API UAttributeMenuWidgetController : public UAuraWidgetController
{
GENERATED_BODY()
public:
virtual void BroadcastInitialValues();
virtual void BindCallbacksToDependencies();
UPROPERTY(BlueprintAssignable, Category = "GAS|Attributes")
FAttributeInfoSignature AttributeInfoDelegate;
protected:
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UAttributeInfo> AttributeInfo;
};
AttributeInfoDelegate는 FAuraAttributeInfo를 델리게이트로 받으며, 블루프린트로 생성했을 때 데이터 에셋을 연결할 수 있도록 한다.
델리게이트 생성 시 블루프린트에서 델리게이트를 할당하기 위해서는 동적(DYNAMIC) 캐스트로 할당해야 한다.
#include "UI/WidgetController/AttributeMenuWidgetController.h"
#include "AbilitySystem/AuraAttributeSet.h"
#include "AbilitySystem/Data/AttributeInfo.h"
#include "AuraGameplayTags.h"
void UAttributeMenuWidgetController::BroadcastInitialValues()
{
}
void UAttributeMenuWidgetController::BindCallbacksToDependencies()
{
UAuraAttributeSet* AS = CastChecked<UAuraAttributeSet>(AttributeSet);
check(AttributeInfo);
FAuraAttributeInfo Info = AttributeInfo->FindAttributeInfoForTag(FAuraGameplayTags::Get().Attributes_Primary_Strength);
Info.AttributeValue = AS->GetStrength();
AttributeInfoDelegate.Broadcast(Info);
}
멤버 변수로 저장했던 특성 세트에서 힘 속성에 해당하는 속성 정보를 가져와 델리게이트로 넘겨주는 예제 코드이다.
(2) 데이터 에셋 연결하기
속성 메뉴 위젯 컨트롤러 블루프린트에서 데이터 에셋을 지정한다.
2. 속성 정보를 속성 메뉴 위젯에서 표시하기
(1) TextValueButtonRow 위젯 블루프린트
이제 속성 메뉴의 행을 가져와 델리게이트에 이벤트를 바인딩한다.
(2) 속성 메뉴의 속성 이름 변경 - TextValueRow - SetLabelText 블루프린트 함수
값을 변경할 속성 메뉴의 각 행의 부모인 TextValueRow를 찾아 SetLabelText 함수를 생성한다.
이후에 TextValueButtonRow에서 (1)와 같이 노드를 연결한다.
(3) 초기값을 설정하는 함수
이전에 AttributeMenuWidgetController 클래스에서 BroadcastInitialValue 함수를 오버라이드하여 사용했었다.
해당 함수의 부모를 찾아 블루프린트에서 호출할 수 있도록 수정한다.
class AURA_API UAuraWidgetController : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void SetWidgetControllerParams(const FWidgetControllerParams& WCParams);
UFUNCTION(BlueprintCallable)
virtual void BroadcastInitialValues() {};
(4) 속성 메뉴 위젯 블루프린트
이전에 블루프린트 호출 가능으로 지정했던 Broadcast Initial Values 함수를 호출한다.
(4-1) BroadcastInitialValues 함수
void UAttributeMenuWidgetController::BroadcastInitialValues()
{
UAuraAttributeSet* AS = CastChecked<UAuraAttributeSet>(AttributeSet);
check(AttributeInfo);
FAuraAttributeInfo Info = AttributeInfo->FindAttributeInfoForTag(FAuraGameplayTags::Get().Attributes_Primary_Strength);
Info.AttributeValue = AS->GetStrength();
AttributeInfoDelegate.Broadcast(Info);
}
void UAttributeMenuWidgetController::BindCallbacksToDependencies()
{
}
콜백 함수를 호출하기 위해 힘 속성을 Attribute Info에서 찾아 델리게이트에 전달한다.
(4-2) 속성 값 가져오기 - TextValueRow 위젯 블루프린트 - Set Numerical Value Int
속성 값을 가져와 정수로 변환한 후 텍스트로 보여주는 함수를 생성하고 연결한다.
(4-3)
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
7-11. 속성 메뉴 UI - (7) 속성 값 변화 델리게이트, 2차 속성 매핑 (0) | 2024.10.23 |
---|---|
7-10. 속성 메뉴 UI - (6) 속성 메뉴 내 행에 속성 값 표시하기, 함수 포인터(Functor) (0) | 2024.10.07 |
7-8. 블루프린트 함수 라이브러리 - (2) 속성 메뉴 위젯 컨트롤러 (0) | 2024.09.27 |
7-6. Native 게임플레이 태그, Native 태그 블루프린트로 전달하기 (0) | 2024.09.19 |
7-5. 게임플레이 태그 매니저, 에셋 매니저 - 싱글톤 패턴 (0) | 2024.09.13 |