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 캐시는 측정 후 추가합니다.
Addressables.InstantiateAsync로 생성한 UI는 ReleaseInstance로 해제합니다. LoadAssetAsync 후 일반 Instantiate 방식을 택하면 인스턴스를 모두 파괴한 뒤 원본 핸들을 Release해야 하므로 첫 구현에서는 두 방식을 섞지 않습니다. 씬 핸들은 SceneTransitionManager, UI 인스턴스 핸들은 UIManager가 소유합니다. 씬 로드 핸들은 UnloadSceneAsync 수명 규칙을 따르며 이중 해제하지 않습니다. 비동기 요청자가 사라져도 로드가 자동 취소되었다고 가정하지 않고, 완료 후 결과를 폐기·해제하는 경로를 둡니다.
Addressables 그룹은 Scenes, UI-Global, UI-Gameplay 등 수명·배포 기준으로 나눕니다. 번들 분리는 그룹 이름만으로 보장되지 않으므로 packing 설정·공유 의존성을 Build Layout에서 확인합니다. Bootstrap에서는 Addressable 프리팹을 직접 참조하여 중복 포함시키지 않고 AssetReference로 보관합니다. 진행률은 다운로드 바이트와 씬 준비 단계를 구분합니다.
첫 구현 범위: Bootstrap, 테스트 씬 2개, 로딩 UI, 화면 1개, 팝업 1개. A→B→A 반복, 연속 전환 요청, 중복 UI 열기, 없는 주소, 씬 초기화 실패, 이벤트 구독 해제와 Addressables 참조 수명을 플레이어 빌드에서 검증합니다.
검증
현재 Packages/manifest.json, ProjectSettings/ProjectVersion.txt, Assets/Scripts/UI/HUD/HUDManager.cs, Assets/Scripts/Utils/SingletonScriptableObject.cs를 읽었습니다. HUDManager의 추적 HUD 풀링 책임과 SingletonScriptableObject의 WaitForCompletion 사용을 확인했습니다. 신규 전환·UI 경로는 비동기로 설계하도록 제안합니다.
설치된 Addressables 2.9.1 Documentation~/LoadingScenes.md에서 activateOnLoad:false가 다른 Addressable 로드 큐를 막는다고 확인했습니다. 따라서 로딩 UI를 먼저 준비하고 초기 버전에서는 activateOnLoad:true를 사용하도록 제안합니다.
공식 근거: 메모리 관리, 씬 언로드 API. 웹의 LoadingScenes 페이지는 조회 시간 초과가 발생하여 설치 패키지 원문으로 확인했습니다.
실제 게임 실행·화면 검증은 수행하지 않았습니다. 설계 검토이며 실행 결과물이 없어 캡처 이미지를 만들지 않았습니다.
남은 사항
구현과 플레이어 빌드 검증은 별도 작업입니다. 실제 메모리 사용량·기존 씬의 초기화 부작용·UI 입력 연동은 미확인입니다. 공식 프로젝트 로고는 확인하지 못해 logo:null로 등록했습니다.
교훈 검토: 변경 없음 — 핸들 소유권과 큐 제약은 이 프로젝트·패키지 설계 근거로 기록했으며 새로운 전역 규칙은 추가하지 않았습니다.
작업 시간
- 제안 시간: 2~4분
- 실제로 완료된 시간: 2026-11-01 15:17:26 KST 시작. 설계 근거 검토 완료 시각 2026-11-01 15:19:15 KST. 공개 배포 검증 시간은 최종 채팅에 별도 기록합니다.
- XERJ: 미사용 — XERJ MCP·프로젝트 검색 스크립트가 확인되지 않아 rg로 소스 검색.
Tracefolio REPORTS & ISSUES