1. 유저 위젯(User Widget)

위젯을 만들 때 상속받게 될 위젯이다.

데이터에 접근하기 위해 필요한 위젯 컨트롤러를 설정하고 설정이 완료되면 블루프린트에서 정의하는 함수인 WidgetControllerSet 함수를 호출한다.

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "AuraUserWidget.generated.h"

UCLASS()
class AURA_API UAuraUserWidget : public UUserWidget
{
	GENERATED_BODY()


public:
	UFUNCTION(BlueprintCallable)
	void SetWidgetController(UObject* InWidgetController);

	UPROPERTY(BlueprintReadOnly)
	TObjectPtr<UObject> WidgetController;	

protected:
	UFUNCTION(BlueprintImplementableEvent)
	void WidgetControllerSet();
	
};
#include "UI/Widget/AuraUserWidget.h"


void UAuraUserWidget::SetWidgetController(UObject* InWidgetController)
{
    WidgetController = InWidgetController;
    WidgetControllerSet();
}

 

WidgetControllerSet 함수는 블루프린트에서 정의될 것이므로 해당 Cpp 파일에 구현하면 컴파일 시 오류가 발생할 것이다.


BlueprintImplementableEvent로 정의된 함수는 반드시 블루프린트에서 정의해야 한다.

C++에서 정의하면 여러 번 정의된 함수가 있다는 컴파일 에러가 발생한다.


 

 

2. 위젯 컨트롤러(Widget Controller)

데이터(모델)에 접근하는 중간 개체이다.

딱히 어떤 형태를 가질 필요가 없으므로 UObject를 상속받는다.

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "AuraWidgetController.generated.h"

class UAttributeSet;
class UAbilitySystemComponent;

UCLASS()
class AURA_API UAuraWidgetController : public UObject
{
	GENERATED_BODY()
	

protected:
	// 종속성 설정
	// 플레이어 스테이트 , 플레이어 컨트롤러, 속성 세트, 어빌리티 시스템 컴포넌트
	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<APlayerController> PlayerController;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<APlayerState> PlayerState;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent;

	UPROPERTY(BlueprintReadOnly, Category="WidgetController")
	TObjectPtr<UAttributeSet> AttributeSet;
};

다양한 형태의 정보를 가져오기 위해 플레이어 스테이트, 플레이어 컨트롤러, 속성 세트, 어빌리티 시스템 컴포넌트에 접근할 준비를 해놓는다.