[언리얼엔진] BindWidget
- ⭐ Game Programming/Unreal Programming
- 2023. 5. 24.
시작하며
코드에서 UI 로직을 만들려고 할 때 블루프린트에서 디자인한 위젯을 제어하려할때 BindWidget meta 지정자를 이용하여 제어할 수 있다.
BindWidget 예제
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UTextBlock* TextName;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UImage* ImgIcon;
정작 UPROPERTY 공식문서에서는 없지만 UI개발시 가장 많이 사용하는 태그이다.
블루프린트에 동일한 클래스와 동일한 이름을 가진 위젯이 있다면 해당 위젯포인터로 코드(C++)에서 런타임에 엑세스 할 수 있다.
적용 방법
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyBindWidget.generated.h"
UCLASS(Abstract)
class UMyBindWidget : public UUserWidget
{
GENERATED_BODY()
protected:
UPROPERTY(BlueprintReadWrite, meta=(BindWidget))
class UTextBlock* TextName;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UImage* ImgIcon;
};
위와같이 클래스를 추가하고 MyBindWidget 클래스를 상속받은 위젯블루프린트를 생성한다. 해당 블루프린트 안에 TextName 이름을 가진 TextBlock을 반드시 추가하도록 하자 없다면 컴파일에 실패하게 된다. 무조건 해당 위젯이 있어야 블루프린트 컴파일이 되므로 해당 포인터는 널이 아님을 보장하게 된다.
BindWidgetOptional
UPROPERTY(BlueprintReadWrite, meta = (BindWidgetOptional))
class UTextBlock* TextName;
UPROPERTY(BlueprintReadWrite, meta = (BindWidgetOptional))
class UImage* ImgIcon;
특정 위젯을 BindWidgetOptional 지정자로 입력하게 되면 블루프린트에서 해당 이름의 위젯이 없어도 컴파일 오류가 발생하지 않는다. 하지만 코드에서 사용할 때에는 항상 nullptr 이 아닌지 확인하고 사용하여야 한다.
BindWdigetAnim
위젯애니메이션도 바인딩 가능하다. BindWidgetAnim / BindWidgetAnimOptional 로 사용가능하다
UPROPERTY(Transient, meta = (BindWidgetAnim))
UWidgetAnimation* Anim_Show;
언리얼 엔진 5.0 부터는 해당 프로퍼티를 Transient로 선언해야한다. Trasient로 하지 않으면 다음과 같이 컴파일 에러가 발생한다.
요약
- 코드에서 블루프린트 위젯을 바인딩 하고자 할때 BindWidget/BindWidgetOptional 메타 지정자를 이용하자
- 위젯 애니메이션을 바인딩할때는 BindWidgetAnim / BindWidgetAnimOptional 메타 지정자를 이용하자
반응형