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 직접 접근
실습 과제
- 화면 A -> B로
PushAsync후PopAsync로 되돌아온다. - Popup을 3개 이상 띄워
UI.PopupCountDiagnostics 경고를 확인한다.
이전 문서 / 다음 문서
이전: 11_Localization.md 다음: 13_CameraSystem.md
관련 API
MCP_Index.md UI 섹션