Game Programming/UE4

[UE4] BindWidget

Doanie 2023. 10. 28. 18:18

[UE4] BindWidget


UMWidget

https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/UMWidget_1/

 

UMWidget::

Valid metadata keywords for the UPROPERTY macro

docs.unrealengine.com

UPROPERY 매크로에 유효한 메타데이터 키워드이며, 종류는 DesignerRebuild, BindWidget, BindWidgetOptional, OptionalWidget, BindWidgetAnim, BindWidgetAnimOptional, IsBindableEvent가 있다.


BindWidget

코드에서 UI로직을 만들어 블루프린트에서 제어하려 할때 사용하며, 이 속성을 사용하려면 디자이너에서 위젯을 바인딩하여야한다.

UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
class UCanvasPanel* C_CP_Name;

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

블루프린트에 동일한 클래스와 동일한 이름을 가진 위젯이 있다면 해당 위젯포인터로 코드(C++)에서 런타임에 엑세스 할 수 있다. 하지만 선언은 하였지만 해당 블루프린트에 동일한 이름을 가진 클래스가 없다면 컴파일 및 빌드를 실패한다.


BindWidgetOptional

BindWidget와 마찬가지로 정의한 UI클래스를 제어할 수 있다. 하지만 이 속성은 선택적으로 디자이너에서 위젯을 바인딩할 수 있다. 즉, 선언한 클래스가 없어도 컴파일 및 빌드가 가능하다.

UPROPERTY(BlueprintReadWrite, meta = (BindWidgetOptional))
class UCanvasPanel* C_CP_Name;

UPROPERTY(BlueprintReadWrite, meta = (BindWidgetOptional))
class UTextBlock* C_TB_Name;

할당되지 않아도 컴파일이 가능하지만 이 말인 즉슨 문제가 발생하여도 원인을 찾을 수 없을 수 있기에 nullptr체크를 하여 사용하도록 한다.


BindWidgetAnim / BindWidgetAnimOptional

위젯 디자이너에서 위젯 애니메이션을 바인딩 할 수 있으며, 정의한 애니메이션을 제어할 수 있다. BindWidget, BindWidgetOptional 처럼 바인딩 필수성에 대해 차이가 있다.

UPROPERTY(meta = (BindWidgetAnim))
UWidgetAnimation* C_Anim_Bind;

UPROPERTY(meta = (BindWidgetAnimOptional))
UWidgetAnimation* C_Anim_BindOptional;

언리얼엔진 기능인 코드로 Widget을 제어할 수 있는 BindWidget을 알아보았다. UE5에서 BindWidgetAnim을 선언 시 Transient을 사용하지 않으면 컴파일 에러가 난다고 하니 참고하자! UPROPERTY(Transient, meta = (BindWidgetAnim))