KoreanFoodie's Study
[언리얼] 동적으로 위젯 생성하기 본문
동적으로 위젯 생성하기
핵심 :
1. UUserWidget 은 CreateWidget, UWidget 은 ConstructWidget 을 사용해 위젯을 생성하자.
2. 생성 후, 그냥 WidgetTree 에 붙이기만 하면 된다.
3. AddChild 같은 함수로 부모자식 관계를 설정할 수 있다!
이전 글에서 동적으로 액터 컴포넌트를 만드는 방법을 기록한 적이 있는데, 이번에는 위젯을 동적으로 만드는 법을 알아보자. 코드는 사실 매우 간단하다 😄
원하는 위젯 클래스를 UUserWidget 으로부터 상속받아 만들었다고 하자. 그럼 아래와 같은 식으로 쓰면 된다 :
// UTextBlock 을 동적으로 생성하여 WidgetTree 에 붙인다
UTextBlock* textBlock = WidgetTree->ConstructWidget<UTextBlock>(UTextBlock::StaticClass());
textBlock->SetText(FText::FromString(str));
// _verticalBox 아래에 UTextBlock 들 붙여주기 (ScaleBox 와 함께)
UScaleBox* scaleBox = WidgetTree->ConstructWidget<UScaleBox>(UScaleBox::StaticClass());
scaleBox->AddChild(textBlock);
_verticalBox->AddChild(scaleBox);
// VerticalBox 아래 슬롯들 채우기 레이아웃 설정
for (auto& slot : _verticalBox->GetSlots())
{
UVerticalBoxSlot* vSlot = Cast<UVerticalBoxSlot>(slot);
vSlot->SetSize(FSlateChildSize(ESlateSizeRule::Fill));
}
위에서는 UTextBlock 을 동적으로 만들어 WidgetTree 에 붙여주고 있다.
UScaleBox 를 만들어 UTextBlock 을 붙이고, 다시 이걸 UVerticalBox 아래로 넣은 다음... 해당 ScaleBox 를 UVerticalBoxSlot 으로 캐스팅해 채우기 설정을 변경해 주고 있다.
뭐... 더 설명할 건 거의 없다 😅
public:
/** The widget tree contained inside this user widget initialized by the blueprint */
UPROPERTY(Transient, DuplicateTransient, TextExportTransient)
UWidgetTree* WidgetTree;
참고로, WidgetTree 는 UUserWidget 에 선언되어 있다.
마지막으로... UWidget 을 상속받은 위젯은 ConstructWidget 을 사용하고, UUserWidget 을 상속받은 위젯의 경우 CreateWidget 을 사용한다!
참고 : 언리얼 공식 문서
'Game Dev > Unreal C++ : Dev Log' 카테고리의 다른 글
[언리얼] 언리얼 최적화 프로파일링 : 멀티 플랫폼을 위한 최적화 드라이브 (언리얼 서밋 2022) 요약 (0) | 2023.05.14 |
---|---|
[언리얼] 언리얼 인사이트 : 언리얼 최적화 프로파일링 (1) | 2023.05.12 |
[언리얼] 비동기로 애셋 로딩 후 액터 스폰하기 (0) | 2023.04.26 |
[언리얼] Visual Studio 한글 깨짐 (Log 한글 깨짐) (0) | 2023.03.28 |
[언리얼] TSharedRef 를 클래스 멤버 변수로 선언할 때 에러 (0) | 2023.03.23 |
Comments