Table of Contents

12. UISystem

왜 필요한가

Navigation(화면 스택), Popup, Dialog, Toast, Loading을 화면마다 직접 구현하면 뒤로가기/중복 오픈 같은 버그가 반복된다.

언제 사용하는가

화면 전환, 팝업/다이얼로그/토스트 표시, 로딩 인디케이터 표시 시.

프로젝트에서 어떤 역할인가

UnityScreenNavigator/uPalette를 Integration 계층에서 감싼 Facade다. UI.PopupCount(warnThreshold 5), UI.NavigationDepth를 Diagnostics에 등록한다.

실제 게임에서는 언제 호출되는가

메인메뉴 -> 옵션 화면 진입 시 Navigation.PushAsync, 확인창은 Dialog.ShowConfirmAsync.

코드 예제

[Inject] private INavigationService _nav;
await _nav.PushAsync("MainMenu");
await Dialog.ShowConfirmAsync("정말 나가시겠습니까?");

관련 Sample

Samples/UI/UISystemSample.cs

Best Practice

Presenter는 Model에 직접 쓰지 않는다 (쓰기는 Service만). View는 Model에 직접 접근하지 않는다.

자주 하는 실수

  • Popup을 닫지 않고 계속 쌓음 (UI.PopupCount 경고 임계값 5 초과)
  • View에서 Model 직접 접근

실습 과제

  1. 화면 A -> B로 PushAsyncPopAsync로 되돌아온다.
  2. Popup을 3개 이상 띄워 UI.PopupCount Diagnostics 경고를 확인한다.

이전 문서 / 다음 문서

이전: 11_Localization.md 다음: 13_CameraSystem.md

관련 API

MCP_Index.md UI 섹션