Addressables 기반 씬 전환·UI 관리 설계 제안
개발 기록 · 블로그 공개
원본 기록 상태 완료
Bootstrap 유지, 씬 전환 직렬화, UI 레이어와 수명 구분을 제안합니다. 구현·실행 검증은 수행하지 않았습니다.

작업 결과
설계 검토를 완료했습니다. Unity 6000.0.83f1, Addressables 2.9.1을 현재 설정에서 확인했습니다. 게임 코드는 수정하지 않았습니다.
권장 구성은 Bootstrap 씬 아래 SceneTransitionManager와 UIManager를 두는 방식입니다. 기존 HUDManager는 캐릭터 추적 HUD와 풀링을 계속 담당하도록 제안합니다.
적용 내용
설계 제안이며 구현 완료를 의미하지 않습니다.
| 구성 | 책임 |
|---|---|
| Bootstrap | 관리자, UIRoot, 단일 EventSystem 유지 |
| SceneTransitionManager | 중복 요청 제어, 로딩 화면, 씬 핸들 소유, 전환 성공·실패 처리 |
| UIManager | UI 프리팹 비동기 생성, 화면·팝업·오버레이 레이어, 중복 열기 제어, 닫기·해제 |
| SceneDefinition | 씬 ID, AssetReference, 기본 화면 UI ID |
| UIDefinition | UI ID, AssetReferenceGameObject, 레이어, Global/Scene 수명, 닫기 정책 |
전환 흐름: 전환 잠금 → 입력 차단·로딩 표시 → 다음 씬 Additive 로드(activateOnLoad:true) → SceneManager.SetActiveScene → 다음 씬 초기화 준비 확인 → 이전 Scene 수명 UI 닫기 및 이전 씬 언로드 → 새 화면 표시 → 로딩 숨김·입력 복원. 이전 씬을 유지한 준비 단계에서는 양쪽 게임플레이를 명시적으로 정지합니다. Awake/OnEnable의 부작용도 준비 계약으로 통제합니다. 다음 씬 초기화 전 실패는 새 씬을 정리하고 기존 씬으로 복귀하며, 이전 씬 언로드가 시작된 이후 실패는 단계별 복구 상태로 처리합니다. 두 씬 동시 유지의 메모리 비용은 실제 콘텐츠로 측정해야 합니다.
UI는 Screen/Popup/Overlay 레이어와 별도로 Global/Scene 수명을 둡니다. 로딩·오류 오버레이는 Global, HUD·인벤토리는 기본 Scene 수명입니다. 모달은 UIManager가 게임 입력 차단 소유권을 관리하며 마지막 모달이 닫힌 후 복원합니다. 닫기(숨김·캐시)와 파괴(해제)를 구분하고 첫 구현은 닫을 때 해제로 단순화합니다. 자주 쓰는 UI 캐시는 측정 후 추가합니다.
InstantiateAsync로 생성한 UI는 ReleaseInstance로 해제합니다. LoadAssetAsync 후 일반 Instantiate 방식을 택하면 인스턴스를 모두 파괴한 뒤 원본 핸들을 Release해야 하므로 첫 구현에서는 두 방식을 섞지 않습니다. 씬 핸들은 SceneTransitionManager, UI 인스턴스 핸들은 UIManager가 소유합니다.
검증
cs를 읽었습니다.
실제 게임 실행·화면 검증은 수행하지 않았습니다.