UISystem - osy9611/ProjectPT GitHub Wiki
Project PT๋ฅผ ์งํํ๋ฉด์ Unity์์ ์ฌ์ฉํ๋ UI ๊ด๋ฆฌ ๋ฐฉ์์ Unreal ํ๊ฒฝ์ ๋ง์ถฐ ๋ณ๊ฒฝํ์๋ค. ์ด ๋ฌธ์๋ Unity์์ ์ฌ์ฉํ๋ UI ๊ด๋ฆฌ ๋ฐฉ์๊ณผ Unreal์์ ์๋กญ๊ฒ ์ ์ฉํ ๋ฐฉ์์ ์ ๋ฆฌํ ๋ฌธ์์ด๋ค.
๊ธฐ์กด Unity UI ์์คํ ๊ฐ์
- Unity ์์๋ UI๋ฅผ Stack๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌํ์ฌ ์ด์ UI ์ํ๋ฅผ ์ถ์ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- UIManager๊ฐ UI ์์ฑ, ๊ฒ์ ๋ฐ ์ ๊ฑฐ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ค.
Uniyt์์ ์ฌ์ฉํ UI ๊ตฌ์กฐ
-
UI ํ์ ๊ตฌ๋ถ
UI ํ์ ์ค๋ช ์์ Staticํญ์ ์ ์ง๋๋ UI (Stack์ผ๋ก ๊ด๋ฆฌ๋จ) ๋ฉ์ธ ๋ก๋น, ์ค์ ์ฐฝ, ์บ๋ฆญํฐ ์ํ์ฐฝ Dynamic๋์ ์ผ๋ก ์์ฑ๋๋ฉฐ Stack์ผ๋ก ๊ด๋ฆฌ๋์ง ์์ ์ธ๋ฒคํ ๋ฆฌ, ํ์คํธ, UI, ์์ดํ ์ ๋ณด์ฐฝ System๊ฒ์ ์ ์ญ์์ ์ฌ์ฉ๋๋ UI ์๋ฆผ ๋ฉ์์ง, ํ์ ์ฐฝ
Unity์์ ์ฌ์ฉํ๋ UIManager ๊ตฌ์กฐ๋ฅผ Unreal ์ ๋ง๊ฒ ๋ณ๊ฒฝํ์๋ค.
UIManagerSubsystem ๋์
-
Unity์์๋
UIManager๊ฐ UI๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง๋ง, Unreal์์๋UIManagerSubsystem์ ํ์ฉํ์ฌ UI๋ฅผ ์ค์์์ ๊ด๋ฆฌ -
์ฃผ์ ์ฝ๋
void UUIManagerSubsystem::CreateLayoutWidget(UCommonLocalPlayer* LocalPlayer) { if (!LocalPlayer) { UE_LOG(LogTemp, Error, TEXT("[UIManageSubsystem]This PlayerController is Nullptr")); return; } if (CurrentWidgetClass == nullptr) { TSubclassOf<UCommonUserWidgetBase> WidgetClass = DefualtWidget.LoadSynchronous(); RegisterWidget(WidgetClass); } check(CurrentWidgetClass); if (APlayerController* PlayerController = LocalPlayer->GetPlayerController(GetWorld())) { if (UCommonUserWidgetBase* NewWidgetBase = CreateWidget<UCommonUserWidgetBase>(PlayerController, CurrentWidgetClass)) { CurrentWidget = NewWidgetBase; AddToLayoutViewport(LocalPlayer); } } }
GameplayTag ๊ธฐ๋ฐ UI ๊ณ์ธต ๊ตฌ์กฐ
-
GameplayTag๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
UI Layer โโโ System UI (GameplayTag: UI.System) โ โโโ ์๋ฆผ ๋ฉ์์ง โ โโโ ํ์ ์ฐฝ โ โโโ ํํ ๋ฆฌ์ผ UI โโโ Static UI (GameplayTag: UI.Static) โ โโโ ๋ฉ์ธ ๋ก๋น UI โ โโโ ์ค์ ์ฐฝ โ โโโ ์บ๋ฆญํฐ ์ํ์ฐฝ โโโ Dynamic UI (GameplayTag: UI.Dynamic) โโโ ์ธ๋ฒคํ ๋ฆฌ UI โโโ ํ์คํธ UI โโโ ์์ดํ ์ ๋ณด์ฐฝ
-
GameplayTag์ ํ์ฉํ UI ํ์ ๋ฐ ๋ฑ๋ก
void UCommonUserWidgetBase::RegisterLayer(FGameplayTag LayerTag, UCommonActivatableWidgetContainerBase* LayerWidget) { if (!IsDesignTime()) { LayerWidget->SetTransitionDuration(0.0); Layers.Add(LayerTag, LayerWidget); } }
UI ์ฌ์ฌ์ฉ์ ์ํ ์บ์ฑ
-
๋นํ์ฑํ๋ UI๋ฅผ ์บ์ฑํ์ฌ ๋ถํ์ํ UI ๊ฐ์ฒด ์์ฑ ๋ฐฉ์ง
-
UI ์ํ ์ ์ฅ โ ๋นํ์ฑํ ์ ์ํ ๋ณต์ ๊ฐ๋ฅ
void UCommonActivatableWidgetBase::NativeOnDeactivated() { Super::NativeOnDeactivated(); if (!CacheWidgets.IsEmpty()) { for (FUserWidgetData& WidgetInfo : CacheWidgets) { if (WidgetInfo.IsActivated()) { PrevVisibleWidgets.Add(WidgetInfo); WidgetInfo.SetActiveWidget(false); } } } }