게임 개발/Unreal Engine

[UE] BindWidget으로 C++와 UMG 연결

지노윈 2024. 1. 23. 20:27
반응형

 

C++에서 Blueprint으로 생성된 위젯을 어떻게 제어할 수 있을까요?
이에 대한 답은 BindWidget 메타 속성입니다.

UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UTextBlock* TitleLabel;

UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UImage* IconImage;

 

다음은 예제 코드입니다.

 

BindExample.h

#pragma once 

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

UCLASS(Abstract)
class UBindExample : public UUserWidget
{
	GENERATED_BODY()

protected:
	virtual void NativeConstruct() override;

	UPROPERTY(BlueprintReadOnly, meta=(BindWidget))
	class UTextBlock* ItemTitle;
};

 

BindExample.cpp

#include "BindExample.h"
#include "Components/TextBlock.h"

void UBindExample::NativeConstruct()
{
	Super::NativeConstruct();

	// ItemTitle can be nullptr if we haven't created it in the
	// Blueprint subclass
	if (ItemTitle)
	{
		ItemTitle->SetText(FText::FromString(TEXT("Hello world!")));
	}
}

 

언리얼 에디터에서 UBindExample을 부모로하는 Widget Blueprint를 만듭니다.

BindWidget으로 정의한 ItemTitle과 동일한 이름과 타입의 멤버를 추가합니다.

 

아래 이미지와 같이요~.

 

meta=(BindWidget)으로 정의하면 항상 동일한 이름의 위젯을 만들어줘야 합니다.

선택적으로 이러한 것을 할 필요가 있습니다. 이 경우 meta=(BindWidgetOptional)로 정의하면 됩니다.

https://benui.ca/unreal/ui-bindwidget/