관리 메뉴

Mini

[UE5] UI 에서 데이터 얻어오는법 본문

UE5/UI

[UE5] UI 에서 데이터 얻어오는법

Mini_96 2024. 5. 27. 00:15

1. UI에서 데이터에 접근하는방법?

* 변수선언후 직접접근 :

이게 최선인가?

AAA급 게임은 어떻게 하는가? 답은 MVC다!

 

2. UI의 구성요소 (MVC kkkkk)

뷰, 모델(데이터, 마나, 레벨 등), 위젯컨트롤러(모델에서 데이터 검색후 뷰에 전달)

 

* 의존성 설정

뷰 -> 컨트롤러 -> 모델

 

3. 구현

i) 위젯(뷰)만들기

뷰는 컨트롤러를 사용한다. / 초기화도 해야함.

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#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();
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "UI/Widget/AuraUserWidget.h"

void UAuraUserWidget::SetWidgetController(UObject* InWidgetController)
{
	//의존성 주입 (초기화)
	WidgetController=InWidgetController;
	WidgetControllerSet(); //BP에서 구현한 함수 실행할것임.
}

ii) 위젯컨트롤러 만들기 

역할 : 데이터를 가져와 모든 위젯에 브로드캐스팅!

컨트롤러는 PC, PS, ASC, AS 모두를 가진다.

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

public:
	//멤버들 초기화하는 함수
	UFUNCTION(BlueprintCallable)
	void SetWidgetControllerParams(const FWidgetControllerParams&
		WCParams);

	//속성들 방송하는 함수
	virtual void BroadcastInitialValues();
	
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;
};