#1. ESlateVisibility
1. 개념
MyWidget->SetVisibility(ESlateVisibility::HitTestInvisible)
ESlateVisibility는 언리얼 엔진의 Slate Framework에서 위젯의 가시성을 제어하는 데 사용되는 열거형입니다.
2. 종류
- Visible: 위젯이 완전히 표시되고, 상호작용 가능한 상태입니다. 위젯이 렌더링 된 이후 사용자와 상호작용 가능하며, 매 프레임마다 렌더링 되어 화면에 나타납니다.
- Collapsed: 위젯이 완전히 숨겨지고, Layout 공간을 차지하지 않습니다. Collapsed 설정은 위젯이 렌더링 되지 않도록 하고, 해당 위젯이 차지하는 Geometry 공간에 대한 계산이 이루어지지 않습니다. 따라서, Collapsed 설정은 위젯을 숨김으로서 화면 공간을 절약하고, 성능 향상에 도움을 줍니다. 반면, Collapsed에서 Visible로 변경할 때, 부모 위젯의 레이아웃을 강제로 갱신해야 할 수 있으며(ForceLayoutPrepass()), 부모 위젯이 Collapsed일 경우, 자식 위젯의 가시성 상태는 무시됩니다.
- Hidden: 위젯이 숨겨지지만, 여전히 레이아웃 공간을 차지합니다. 따라서, Hidden은 위젯의 레이아웃 정보는 유지하며, 렌더링되지 않도록 하기 위해 활용합니다.
- HitTestInvisible: 위젯이 표시되지만, 직접적인 상호작용은 허용하지 않습니다.
- SelfHitTestInvisible: 위젯이 표시되지만, 직접적인 상호작용은 허용하지 않고, 자식 위젯은 상호작용을 허용합니다. 특히, SelfHitTestInivisble은 복잡한 레이아웃에서 특정 영역만 상호작용을 허용할 때 유용합니다.
3. Collapsed vs Hidden
// Hidden 예제
void UMyUserWidget::SetupHiddenExample()
{
UVerticalBox* VerticalBox = NewObject<UVerticalBox>(this);
UTextBlock* Text1 = NewObject<UTextBlock>(this);
Text1->SetText(FText::FromString("Text 1"));
VerticalBox->AddChild(Text1);
UTextBlock* Text2 = NewObject<UTextBlock>(this);
Text2->SetText(FText::FromString("Text 2 (Hidden)"));
Text2->SetVisibility(ESlateVisibility::Hidden);
VerticalBox->AddChild(Text2);
UTextBlock* Text3 = NewObject<UTextBlock>(this);
Text3->SetText(FText::FromString("Text 3"));
VerticalBox->AddChild(Text3);
// 결과:
// Text 1
// [빈 공간]
// Text 3
}
// Collapsed 예제
void UMyUserWidget::SetupCollapsedExample()
{
UVerticalBox* VerticalBox = NewObject<UVerticalBox>(this);
UTextBlock* Text1 = NewObject<UTextBlock>(this);
Text1->SetText(FText::FromString("Text 1"));
VerticalBox->AddChild(Text1);
UTextBlock* Text2 = NewObject<UTextBlock>(this);
Text2->SetText(FText::FromString("Text 2 (Collapsed)"));
Text2->SetVisibility(ESlateVisibility::Collapsed);
VerticalBox->AddChild(Text2);
UTextBlock* Text3 = NewObject<UTextBlock>(this);
Text3->SetText(FText::FromString("Text 3"));
VerticalBox->AddChild(Text3);
// 결과:
// Text 1
// Text 3
}
- 레이아웃 공간: Collapsed는 차지하던 공간을 완전히 제거하고, Slate Prepass 작업(UI 요소의 Geometry Entry와 관련된 작업 수행)에서 제외되어 성능상 이점이 있습니다. Hidden은 차지하던 공간을 유지하며, 위젯만 숨깁니다. 따라서, Slate Prepass의 Gemetry 계산에 여전히 포함되어 비교적 성능에 영향을 끼칩니다.
- 사용 시나리오: Collapsed는 위젯을 완전히 지우고, 다른 요소들이 그 공간을 채우기 위해 활용합니다. 예를 들어, 동적으로 나타내는 메뉴 목록 등에 활용하기 적합합니다. 반면, Hidden은 위젯을 일시적으로 숨기고 나중에 같은 위치에 다시 표시할 때 유용합니다. 예를 들면, 토글 가능한 UI 요소에 적합하죠.
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal]#UFUNCTION 매크로 (0) | 2024.08.28 |
---|---|
[Unreal]#비동기 프로그래밍 (0) | 2024.08.21 |
[Unreal]#Delegate, Event, Delegate vs Event (0) | 2024.07.30 |
[Unreal]#스마트 포인터 (0) | 2024.07.30 |
[Unreal]#생명 주기 함수 (0) | 2024.07.24 |