43 KiB
GodDem 대화로그 — 2026-08-25
§번호는 프로젝트 누적 연속 (2026-08-24.md §109에서 이어짐)
파일 분기 주의: §108·§109 는 집행일이 2026-08-25 이지만 세션 연속성 때문에
2026-08-24.md에 있다(PM 판정 = 08-24 §109). 같은 날짜 엔트리가 두 파일로 갈리므로 08-25 작업 이력을 추적할 때는 두 파일을 함께 볼 것.
110. 구 UGUI 아웃게임(카드·카드뽑기·영웅) 접근 경로 복구 (개발팀장, GodDem 로컬 커밋 af78882)
PD 원문 (2026-08-25)
"본 프로젝트 초기에 UI 툴킷에서 UGUI로 바꾼 버전의 기능들 (카드 및 카드 뽑기 기능, 영웅 기능 등등)을 되살리라는 얘기야. 아웃게임 컨텐츠는 재활용하려고 했는데 UI를 바꾸면서 기능조차 다 바뀐거 같아"
PM 하달 범위
"접근 경로 복구 + 동작 실태 보고"까지. 구 UGUI 화면의 기능 수정·리팩터·Layer Lab UI 재이식은 범위 밖(금지). 씬(.unity)·프리팹 편집 절대 금지(PD 에디터 테스트 중) — 코드 전용. Unity MCP 읽기 전용. GodDem 로컬 커밋까지(push 금지 = PM 영역), BT 커밋 금지.
실측 (개발팀장 독립 검증 — PM 실측 전건 재확인 + 신규 4건)
PM 제공 실측 5항목은 전부 재확인됐다. 그 위에 설계를 바꾼 신규 실측 4건이 나왔다.
| # | 실측 | 근거 | 설계 영향 |
|---|---|---|---|
| 1 | 구 UGUI 코드 46파일 전량 잔존(삭제 0건) | ls Assets/Script/UGUI/*.cs | wc -l = 46 |
복구 = 재작성 아님 |
| 2 | Lobby.unity L747 UGUIUIControllers m_IsActive 0 |
씬 YAML 직접 파싱 | 런타임 SetActive 로 충분 |
| 3 | ★신규 씬 직렬화 L765-766 _canvas: {fileID: 0} · _uiRoot: {fileID: 0} = 둘 다 null |
씬 YAML | EnsureCanvas()가 새 캔버스를 sortingOrder 0(기본값)으로 생성 → GodDem 캔버스(100, SurvivalLobbyController.cs:84)에 가려짐. SetActive(true) 만으로는 화면에 안 뜬다 |
| 4 | ★신규 UGUILobbySceneUIController는 Awake/Start 아닌 OnEnable에서 SetupViews(), OnDisable 미구현 |
UGUILobbySceneUIController.cs:47 |
SetActive(false)→(true) 반복 시 MainDocument 중복 Instantiate + MainMenuUIEvents 중복 구독 + _allViews 누적(readonly List·Clear 없음) |
| 5 | ★신규 MainDocument.prefab(4.2MB) 내 safe-area·LobbyScreen·UpgradeScreen·ContentsScreen·CardScreen·ShopScreen·MainMenu·Header 각 1건 실존, UGUIStyleTheme.asset 실존 |
프리팹 YAML m_Name 카운트 |
직렬화 참조 유효 = 초기화 성공 가능성 높음 |
| 6 | ★신규 UGUIView 생성자는 root null 시 ArgumentNullException throw |
UGUIView.cs:56 |
노드 1개만 누락돼도 OnEnable 전체 중단 → 예외 포착 장치 필요 |
| 7 | UGUIModalControllers 활성(m_IsActive 1)·_sortingOrder: 10·모달 15종 전부 결선 |
씬 YAML _modalPrefabs 전수 |
가챠 결과/확률·영웅 상세/선택/프로필·장비상세·공격상세 모두 프리팹 연결 살아 있음 |
| 8 | 세이브 완전 분리 — 원작 save.txt(Toolkit.UserData.cs:14), Survival survival_meta.json(SurvivalMeta.cs:111) |
소스 | 진행도 상호 오염 없음 |
| 9 | 재화는 공유 — PlayerManager.GetUserData()가 CurrencyManager.Instance.GetSavedData() 포함, Survival 로비도 동일 CurrencyManager.Add/Sub 사용 |
PlayerManager.cs:60·SurvivalLobbyController.Gacha.cs:445 외 |
골드·젬은 양쪽이 같은 지갑 = 유일한 실질 충돌축 |
| 10 | MainMenuUIEvents는 UGUI·UITK 스택 전용, SurvivalLobbyController 미사용 |
grep 전수 | 이벤트 충돌 없음 |
설계 결정과 기각안 (C32)
결정 1 — 전환 방식: 최초 1회 SetActive(true) + 이후 왕복은 캔버스 enabled 토글
- 근거: 실측 4.
OnDisable이 없어 SetActive 왕복은 문서 중복 생성·이벤트 중복 구독을 누적시킨다. 최초 활성만 SetActive 로 하고 그 뒤로는 컨트롤러를 계속 켜 둔 채 캔버스만 껐다 켠다. - 기각안: 복귀 시
UGUIUIControllers.SetActive(false)→ 재진입 시 다시true. 기각 사유 = 재진입마다 MainDocument 4.2MB 프리팹이 한 겹씩 더 쌓이고 메뉴 하이라이트 이벤트가 2중·3중 발화한다(구조적 누수).
결정 2 — 숨김은 canvas.enabled = false + GraphicRaycaster.enabled = false (GameObject SetActive(false) 기각)
- 근거:
SurvivalLobbyController는_toastRoutine코루틴을 돌리고_lobby/_shop/_hero와 성장·강화·마스터리 패널의activeSelf로 화면 상태를 보유한다.SetActive(false)는 하위 전체OnDisable연쇄 +Selectable상태 리셋 + TMP 재레이아웃을 유발한다. 단순 "안 보이게 하기"의 대가로 과하다.canvas.enabled=false는 렌더만 멈추고 계층 상태를 건드리지 않아 복귀 시 직전 화면이 그대로 살아 있다(PM 지시 "복귀 시 상태 보존에 안전한 쪽 판단·근거 기재" 이행). - 캔버스만 끄면
GraphicRaycaster가 남아 보이지 않는 클릭을 먹으므로 양쪽 대칭으로 함께 끈다. - 기각안: GodDem 캔버스 GameObject SetActive(false). 기각 사유 = 위 상태 파괴. 부수적으로
Toast가 GodDem 캔버스 자식이라 어느 방식이든 구 UI 표시 중에는 가려진다 → 복귀 오버레이에 별도 상태 텍스트를 둬 해소.
결정 3 — 복귀 버튼은 별도 캔버스(TempNavLegacyOverlay, sortingOrder 500), 컨트롤러 자식(GodDem 캔버스 밖)
- 근거: 복귀 버튼을 GodDem 캔버스 안에 두면 그 캔버스를 끄는 순간 같이 사라져 돌아올 방법이 없어진다. sortingOrder 500 은 구 메인(0)·구 모달(10)·GodDem(100) 전부보다 위.
결정 4 — 캔버스 포착 실패 시 전환 자체를 취소
- 근거: 구 캔버스를 못 잡은 채 GodDem 로비만 끄면 아무것도 없는 화면에 갇힌다.
_tnLegacyCanvases.Count == 0이면 GodDem 로비를 유지하고 Console + Toast 로 사유를 남긴다.
결정 5 — 초기화 예외는 Application.logMessageReceived 훅으로 원문 회수
- 근거: Unity 는
OnEnable내부 예외를 콘솔에만 남기고SetActive호출부로 전파하지 않는다.try/catch만으로는 실측 6의ArgumentNullException을 놓친다. 활성화 순간에만 훅을 걸어 Error/Exception/Assert 를 가공 없이 그대로 Console + 오버레이 상태 텍스트에 노출한다. 임의 수정 금지(복구 범위 판단은 PM·PD 영역) 준수.
산출물
- GodDem 로컬 커밋
af78882(1 파일 · 336 insertions · 7 deletions). push 미실시 = PM 영역. BT 레포 커밋 없음 - 수정 1파일:
E:\NerdNavis\GodDem\Assets\Script\Survival\SurvivalLobbyController.TempNav.cs(+336 / -7)- 진입 버튼 "구 아웃게임"(8번째·전용 색) →
TnEnterLegacyOutgame() - 복귀 오버레이 "GodDem 로비로"(우상단 고정) →
TnExitLegacyOutgame() - 탐색
TnResolveLegacyRoot()— 씬 루트 순회(비활성 포함).GameObject.Find미사용(PM 지시 준수). 폴백 =Resources.FindObjectsOfTypeAll<UGUILobbySceneUIController>()+ 씬 소속 필터 - 캔버스 포착
TnCollectLegacyCanvases()— 활성화 전후 씬 루트 차집합. 폴백 =LobbyScreen노드 보유 캔버스 역추적(씬에서_uiRoot가 나중에 결선되는 경우 대비). 스냅샷을_tnRootsBeforeLegacy필드로 보존해 포착 실패 시 재클릭마다 재시도(감사 I2) - C2 헤더 주석 2축 개정(감사 I3) — 축2 = 구 UGUI 기능의 GodDem 신 UI 재이식, 본 버튼은 그 축의 진단용 proxy
- 패널 레이아웃: 버튼 7→8개로 800→896 확대. 아래변 720 고정·위로만 96 확장(중심 오프셋 160→208) — 아래로 키우면
Shadow상단 713 침범. 상단 1616 <BannerFrame03하단 1629 → 무충돌 유지
- 진입 버튼 "구 아웃게임"(8번째·전용 색) →
- 백업
공유/개발팀_백업/GodDem/SurvivalLobbyController.TempNav.cs.bak_20260825_0200.cs(C6·감사 M1 정정 후 파일명) - 컴파일 산출물
공유/개발팀_백업/GodDem/compile_legacy_outgame_switch.bak_20260825_0200.log(§93 ⑤ 표준) - PD 지시 로그 백업
공유/개발팀_백업/GodDem/개발팀_PD_지시_로그.md.bak_20260825_0200.md(M2 등재 선행 백업) - 세 백업 모두 BT
.gitignore매칭 확증 —git check-ignore -v:.gitignore:66 *.bak_*/.gitignore:78 *.log(BT 미추적) - 씬·프리팹 무접촉 —
git status에.unity·.prefab변경 0건
구 UGUI 아웃게임 화면별 동작 실태표 (PD 의사결정 근거)
③ 열림 여부는 런타임 Play 검증 불가(PD 에디터 테스트 중·Play 제어 금지)이므로 전부 소스 근거 기반 판정이며 실행 확인은 미검증이다.
| 화면 | ① 코드 잔존 | ② 씬/프리팹 참조 | ③ SetActive 후 열림 (미검증·소스 근거) | ④ Survival 메타 충돌 |
|---|---|---|---|---|
| LobbyScreen | UGUILobbyView.cs 잔존 |
프리팹 노드 1건 | 열릴 전망 — 첫 화면으로 OpenScreen(_lobbyView) 고정. PlayerManager(스테이지 이동·미션) 의존 |
⚠ 시작 버튼이 SceneManager.LoadScene("Battle")(UGUILobbyView.cs:83) — GodDem 전투는 SurvivalBattle. 누르면 구 전투 씬으로 이탈(Battle.unity 실존·빌드세팅 enabled). 복귀는 구 설정모달 LoadScene("Lobby")로 가능하나 그때 임시 메뉴부터 다시 눌러야 함 |
| UpgradeScreen | UGUIUpgradeView + UGUIEnhanceContentView·UGUIEvolutionContentView 잔존 |
content--enhance·content--evolution 노드 |
열릴 전망 — PlayerManager·TableManager 의존 |
재화 공유(아래 공통). Survival 장비강화(B2)와 별개 시스템(세이브 분리) |
| ContentsScreen | UGUIContentsView 잔존 |
defence_dungeon_card·invasion_dungeon_card 노드 |
⚠ 위험 지점 — SetVisualElements()가 TableManager.Instance.ExtraContents[BattleType.Defense]를 널가드 없이 인덱싱. 테이블 미로드·키 부재 시 생성자에서 예외 → OnEnable 전체 중단(다른 화면까지 미생성) |
던전 입장권(EnterTicketID) = CurrencyManager 재화 |
| CardScreen | UGUICardView + 탭 4종 |
content--item·--skill·--rune·--hero 노드 |
열릴 전망 — Item 탭 기본 활성 | PD 지목 본체. 아래 탭별 세부 참조 |
| ┗ Item 탭 (카드뽑기) | UGUIItemContentView·UGUIItemCard·UGUIItemDetailModal |
gacha_button--1time·--10times 노드 |
열릴 전망 — 뽑기 실행 = PlayerManager.GachaController.GachaTrackers[Constant.CARD_GACHA_ID] |
구 가챠(save.txt) ↔ Survival 가챠(survival_meta.json) 완전 분리. 단 소모 재화는 공유 지갑 |
| ┗ Skill 탭 | UGUISkillContentView = 빈 플레이스홀더 |
노드만 존재 | 열리지만 원작에서도 비어 있음(코드 주석 명시) | 없음 |
| ┗ Rune 탭 | UGUIRuneContentView·UGUIRuneCard·UGUIRuneDetailModal·UGUIRuneResetModal |
모달 2종 결선 | 열릴 전망 — TableManager·PlayerManager 의존 |
Survival 에 대응 시스템 없음 |
| ┗ Hero 탭 (영웅) | UGUIHeroContentView·UGUIEquipButton |
모달 3종(Detail·Select·Profile) + EquipmentDetailModal 결선 |
열릴 전망 — PlayerManager.BoostController.Boosts[BoostType.Equip]·TableManager.Equip 의존 |
구 장비(EquipBoost) ↔ Survival 장비(SurvivalItemCatalog) 별개 시스템 |
| ShopScreen | UGUIShopView = 빈 플레이스홀더 |
노드만 존재 | 열리지만 원작에서도 비어 있음(코드 주석 명시) — 구 UGUI 상점은 처음부터 미구현 | 없음. Survival 상점(9종)이 유일 구현체 |
| Header / MainMenu | UGUIHeaderView·UGUIMainMenuView |
Header·MainMenu 노드 |
열릴 전망 — 상시 표시. 5개 메뉴 버튼이 MainMenuUIEvents로 화면 전환 |
없음 |
| 모달 — 가챠 결과 | UGUIGachaResultModal·UGUIRewardCard |
_modalPrefabs["GachaResultModal"] 결선 |
열릴 전망 — UGUIModalControllers 이미 활성(order 10) |
재화 공유 |
| 모달 — 가챠 확률 | UGUIGachaProbabilityModal |
_modalPrefabs["GachaProbabilityModal"] 결선 |
열릴 전망 | 없음 |
| 모달 — 영웅 상세/선택/프로필 | UGUIHeroDetailModal·UGUIHeroSelectModal·UGUIHeroProfileModal |
_modalPrefabs 3키 전부 결선 |
열릴 전망 | 없음 |
| 모달 — 장비 상세 | UGUIEquipmentDetailModal |
_modalPrefabs["EquipmentDetailModal"] 결선 |
열릴 전망 | 구 장비 시스템 소속 |
| 모달 — 던전 입장 | UGUIDungeonEnterModal |
결선 | 열릴 전망 | ⚠ 입장 시 LoadScene("Battle")(:135) — 구 전투 씬 이탈 |
공통 충돌축(유일) — 재화. 구 UGUI와 Survival 로비가 같은 CurrencyManager 인스턴스를 쓰고 저장은 save.txt 한 곳이다. 구 화면에서 뽑기·강화로 골드를 쓰면 Survival 로비 골드가 실제로 줄어든다(그 반대도 성립). 진행도(카드·룬·영웅 vs Survival 성장·장비·마스터리)는 파일이 분리돼 서로 오염되지 않는다.
미발견 항목 — 구 UGUI 스택에서 "카드 뽑기"의 실행 진입점은 CardScreen 이 아니라 CardScreen ▸ Item 탭 안에 있다(gacha_button--1time/--10times). PD 표현의 "카드 및 카드 뽑기 기능"은 동일 화면 한 곳에 모여 있다.
검증
- Roslyn 실컴파일(Unity 6000.3.19f1
csc.dll+Library/Bee/artifacts/1900b0aE.dag/Assembly-CSharp.rsp,-out/-refout만 스크래치패드로 리다이렉트해 Unity 빌드 산출물 무접촉): 에러 0 · 경고 6 · exit 0 · DLL 생성 확인. 감사 I2·I3 정정 후 재컴파일 동일 결과(에러 0·경고 6·동일 집합) - 경고 6건 전문 요지 (전부 기존 파일 — 본 변경발 경고 0, 2026-08-24 §108 기저선과 동일 집합):
Singleton.cs(52,40)CS0618Object.FindObjectOfType(Type)obsoleteSingleton.cs(54,29)CS0618Object.FindObjectsOfType(Type)obsoleteSingleton.cs(10,29)CS0414applicationIsQuittingassigned but never usedUGUIBattleSceneUIController.cs(112,17)CS0618Object.FindObjectOfType<T>()obsoleteUGUILobbySceneUIController.cs(152,17)CS0618Object.FindObjectOfType<T>()obsoleteSurvivalLobbyController.cs(97,17)CS0618Object.FindObjectOfType<T>()obsolete
- rsp 정합 확인:
SurvivalLobbyController.TempNav.cs(L591)·UGUILobbySceneUIController.cs(L640)·UGUIView.cs(L661) 모두 소스 목록 포함.Assets/Script/하위에 asmdef 없음 → 동일Assembly-CSharp=UGUIView.FindDeep(internal) 접근 가능 확증 - Unity 에디터 콘솔 조회(MCP 읽기 전용·
GodDem@23bbe4a1) error/warning 0건. 단 이 값은 본 변경의 근거가 아니다 —Library/ScriptAssemblies/Assembly-CSharp.dll타임스탬프 01:37 < 소스 수정 01:53 = 에디터가 아직 재컴파일하지 않은 상태. 본 변경의 컴파일 근거는 위 Roslyn 실컴파일 단독(C23)
미검증 (C23 태그 — pm-auditor 질의 4 지정 6종 + 개발팀장 추가 2종)
- 구 UGUI 초기화 성공 여부·각 화면 정상 표출 — Play 제어 금지로 런타임 확인 불가. 실태표 ③열은 전부 소스 근거 판정
- "GodDem 캔버스를 꺼야 보인다"는 sortingOrder 정적 추론 —
overrideSorting·sortingLayer·카메라 구성은 미확인. 다만 어긋나더라도 복귀 버튼(order 500)이 살아 있어 갇히지 않는다 - 프리팹 노드 8종의 런타임 탐색 성공 — 직렬화 참조 유효 ≠
Rect()/FindDeep탐색 성공 - 구 UI 하위 기능(카드뽑기·영웅)의 실동작
- 모달(order 10)·토스트(order 20) 캔버스는 포착 대상 밖 —
UGUIModalControllers·UGUIToastControllers는 활성화 전부터 씬 루트에 있어beforeRoots차집합에 걸리지 않는다. 따라서 복귀 시에도 계속 활성으로 남는다. 의도적 선택(C19 — 본 변경 이전부터의 씬 상태를 건드리지 않음). GodDem 캔버스(order 100)가 둘 다 덮으므로 시각·입력 영향은 없다고 판단하나 미검증 - 세이브 분리(
save.txt↔survival_meta.json)로 인해 구 UI 가 표시할 데이터 상태 TnFirstActivateLegacy()의 예외 포착이 실제로 무엇을 잡아낼지 — 특히UGUIContentsView의TableManager.ExtraContents무가드 인덱싱- 복귀 오버레이 버튼(우상단 240x72)이 구 UI Header 와 시각적으로 겹치는지 — 겹쳐도 order 500 이라 클릭은 항상 가능하나 해당 모서리가 가려질 수 있음
pm-auditor 사전 감사 판정과 조치 (판정 도착 — 인용 가능)
발주 후 판정 도착. Critical 0 · Major 3 · Minor/Improvement 5. Major 전건 수용·정정 완료.
| 지적 | 판정 | 개발팀장 조치 |
|---|---|---|
M1 C6-1 백업 파일명 표준 위반(.cs 확장자 탈락) |
수용 — 감사관이 옳다 | 실측으로 재확인: 동 디렉토리의 비-.cs 백업은 전건 원본 확장자 보존(A10_bunsin.asset.bak_….asset·SurvivalBattle.unity.bak_….unity·survival_meta.json.bak_….json·SurvivalUpgrade.csv.bak_….csv), .cs 도 …_0352 이후 일관되게 .cs.bak_. 즉 {원본명} = 확장자 포함 전체 파일명이 정확한 해석. 본 건이 구 위반형을 답습했다. 2건 rename 완료 — SurvivalLobbyController.TempNav.cs.bak_20260825_0200.cs / 전 세션분 SurvivalLobbyController.cs.bak_20260825_0123.cs |
| M2 P19·C13 PD 지시 로그 미등록 | 수용 | 공유/PD_지시_트래킹/개발팀_PD_지시_로그.md BT13-GodDem 행에 세그먼트 소급 등재 완료(백업 선행·셀 경계 파싱 후 삽입·표 구조 무결 검증 pipe count 8·62행 유지). 본 §110 은 PD 원문 인용으로 시작 |
| M3 C35-11 오적용 | 수용·기록 | C35-11 (a) 미충족 확인 — 본 건에 plan-auditor 모드A 설계 감사 선행 없음. 또한 (d)는 main push 상태를 규율하므로 GodDem 로컬 커밋에는 비해당. 본 건은 C35-1 #2 원칙 그대로(사전 호출 + 판정 수령 후 집행)이며 실제로 판정 수령 후 커밋했다. 신설 조항의 외연 확대 해석 선례가 굳지 않도록 여기 명기 |
| I1 커밋 경로 한정 | 수용 | Unity 자동 터치 .asset 6종이 dirty. git add -A 미사용 — 단일 경로 명시 스테이징 |
| I2 캔버스 포착 실패 시 버튼 영구 무력화 | 수용 — 실코드 결함 | 실재 버그였다. _tnLegacyActivated가 true 라 재클릭이 빈 리스트에 TnSetLegacyVisible만 돌던 경로를 분리. 활성화 직전 씬 루트 스냅샷을 _tnRootsBeforeLegacy 필드로 보존해 재클릭마다 포착 재시도하도록 수정 |
| I3 C2 proxy 축 1개 누락 | 수용 | 헤더 C2 절을 2축으로 개정 — 축1(GodDem 정식 IA 배치) + 축2(구 UGUI 기능의 GodDem 신 UI 재이식). 본 버튼은 축2 의 진단용 proxy임을 명기 |
| I4 완료 보고 표현 제약 | 수용 | 본 산출물은 PD 원문 "되살리라"를 이행하지 않는다. 도달점 = 진입 경로 확보 + 동작 실태 관측 가능 상태이며 재이식 미착수. "기능 복구 완료"류 표현 사용 금지 |
| I5 서술 정밀도 | 수용 | 정확한 표현은 "Unity 는 OnEnable 내부 예외를 콘솔에 남기되 SetActive 호출부로 전파하지 않는다" — 삼키는 것이 아니라 로그로 남기기 때문에 훅이 작동한다. 코드 주석·본 문서 모두 이 표현으로 통일 |
감사관 지적 중 사실 정정 2건(개발팀장 → 감사관): ①sortingOrder 100 은 SurvivalLobbyController.cs:84(감사관 :85) — 주석 줄 기준 차이. ②감사관이 "누락"으로 표기한 OnDestroy 존재는 결론에 영향 없음(활성 상태에서 OnDestroy는 호출되지 않으므로 SetActive 왕복 시 중복 생성 문제는 그대로 성립).
PD 안내 (필수)
- 사용법 — 로비 좌측 "임시 메뉴" 맨 아래 청록색 "구 아웃게임" 클릭 → 구 UGUI 아웃게임 표시. 우상단 "GodDem 로비로" 클릭 → 원래 로비 복귀(직전 화면 그대로 보존).
- 재컴파일 — 기존
.cs수정이므로 도메인 리로드가 발생한다. 진행 중이던 Play 세션은 끊긴다. Play 중지 → 재생 1회 필요(자동 리프레시가 안 걸리면 Ctrl+R). - 구 로비의 "시작" 버튼 주의 —
Battle씬으로 이동한다(GodDem 전투SurvivalBattle아님). 눌러서 씬이 바뀌면 Lobby 씬으로 돌아온 뒤 임시 메뉴부터 다시 눌러야 한다. - 골드·젬은 양쪽이 같은 지갑이다. 구 화면에서 뽑기·강화로 소비하면 Survival 로비 재화가 실제로 줄어든다. 재활용 여부 판단 시 이 축만 유일한 실질 충돌이다.
- 초기화 예외가 나면 우상단 복귀 버튼 아래에 붉은 글씨로 "초기화 예외 N건"이 뜬다. Console 원문을 그대로 남겨 뒀으니 그 내용을 알려 주시면 복구 범위를 판정한다. 임의 수정은 하지 않았다(PM 지시 준수).
규칙 준수
- C35-1 #2 — pm-auditor 사전 호출 + 판정 수령 후 커밋(매니페스트
2026-08-25_0200, targetGodDem:Assets/Script/Survival/SurvivalLobbyController.TempNav.cs). C35-11 갈음 비적용((a) 설계 계층 plan-auditor 모드A 감사 선행 없음). (d) 3요건은 main push 규율이라 로컬 커밋에 비해당 — 발동하지 않았고 인용할 미도착 판정도 없다(M3 정정 반영) - C2 — 본 전환은 **proxy(임시)**다. 원 파일 헤더 주석의 철거 계약(파일 삭제 +
Start()호출 1줄 제거)은 그대로 유효하다. 근본 해결 = PD 가 재활용 대상을 확정한 뒤 해당 기능을 정식 IA 에 배치하는 것 - C6 — 백업 2종 표준 경로·표준 파일명(확장자 포함)·gitignore 확증
- C19 — 구 UGUI 화면 코드 수정 0건 확증(
git diff HEAD~1 HEAD --name-only | grep -c "Assets/Script/UGUI/"= 0). 접근 경로만 신설. 커밋 파일 목록 1건·.unity/.prefab0건 - PM 인계 사항 — 매니페스트
2026-08-25_0200은.claude/manifest/active/에 잔존한다.manifest_archive.sh는 BT 레포 HEAD 커밋 파일과 cross-check 하는데 본 집행의 커밋은 GodDem 레포에 있고 BT 커밋은 PM 영역이라 아카이브 조건이 성립하지 않았다. BT 커밋·push 시 자동 이동 예상. 활성 매니페스트는 편집을 허용하는 쪽이라 잔존 자체가 차단을 일으키지는 않는다
111. 구 UGUI 아웃게임 전환 push·실태표 확보 (PM·2026-08-25)
- PM push: GodDem
5403caa..af78882origin 반영 — 임시 메뉴에 "구 아웃게임" 전환 + "GodDem 로비로" 복귀(별도 캔버스 order 500·컨트롤러 자식) - 설계 재정의 3건(개발팀장 씬 실측 — PM 지시안 보정): ①구 컨트롤러 씬 직렬화
_canvas·_uiRoot둘 다 null → 활성화 시 sortingOrder 0 캔버스 자체 생성 = SetActive만으로는 GodDem(100) 아래라 안 보임·GodDem 캔버스 차단 필수 ②UGUILobbySceneUIController는OnEnable초기화·OnDisable부재 → SetActive 왕복 시 4.2MB 프리팹 중첩·이벤트 구독 누적 → 최초 1회만 SetActive·이후 canvas.enabled 토글 ③UGUIView생성자 예외는 Unity가 콘솔에만 남기고 전파 안 함 →Application.logMessageReceived훅으로 원문 회수(임의 수정 0) - 숨김 방식:
canvas.enabled=false+GraphicRaycaster.enabled=false채택 /SetActive(false)기각(코루틴·Selectable 리셋·TMP 재레이아웃 부작용·복귀 시 직전 화면 보존 불가). 캔버스 포착 실패 시 전환 취소(빈 화면 갇힘 방지) - ★ 화면별 실태표 확보(PD 재활용 결정 근거·③열은 전부 소스 판정·런타임 미검증): LobbyScreen ○(단 시작 버튼이
LoadScene("Battle")= 구 전투 씬) / UpgradeScreen ○(강화·진화) / ContentsScreen ⚠(TableManager.ExtraContents[...]무가드 인덱싱 — 실패 시 OnEnable 전체 중단) / CardScreen ○ = PD 지목 본체(Item 탭 = 카드뽑기·GachaController.GachaTrackers[CARD_GACHA_ID]·구/신 가챠 완전 분리 / Skill 탭 = 원작부터 빈 플레이스홀더 / Rune 탭 ○ / Hero 탭 ○ = 영웅·BoostController.Boosts[Equip]) / ShopScreen = 원작부터 미구현 / 모달 15종 전량 결선·UGUIModalControllers이미 활성 - 유일 실질 충돌 = 재화:
PlayerManager.GetUserData()가CurrencyManager.GetSavedData()포함 — 구 화면 소비가 Survival 골드를 실제 차감. 진행도는save.txt↔survival_meta.json분리라 오염 없음 - 누락 정정: "카드 뽑기"는 CardScreen이 아니라 CardScreen ▸ Item 탭 내부 — PD 지목 "카드 및 카드 뽑기"는 동일 화면 한 곳
- 감사 Major 3 전건 수용: M1 백업 파일명 재발 2건 rename(교훈 메모리 재발 기록 갱신) / M2 PD 지시 로그 소급 등재 / M3 C35-11 오적용 정정 — 본 건은 plan-auditor 모드A 선행 없음·(d)는 main push 규율이라 로컬 커밋 비해당 → C35-1 #2 원칙 그대로(실제 판정 수령 후 커밋). 신설 조항 외연 확대 선례 방지 명기
- 검증: Roslyn 에러 0·경고 6(전부 기존 파일·본 파일발 0·기저선 동일). 에디터 콘솔 0건은 미재컴파일 상태라 근거 아님(정직 표기)
112. 임시 메뉴 재구성 — 과거 UGUI 아웃게임 전용 진입점화 (개발팀장, GodDem 로컬 커밋 cf8cd19)
PD 원문 (2026-08-25): "기존 메뉴가 하나도 안보이는데? 내가 시킨건 임시 메뉴에 과거 메뉴가 발생되도록 해달라고 했는데 네가 새로 구현한 UI가 중복해서 노출되고 있잖아"
결정
임시 메뉴의 역할을 하나로 좁힌다 — "과거 UGUI 아웃게임 5개 화면으로 가는 직행 통로". Survival 신규 시스템 버튼은 전량 제거한다.
직전 (af78882) |
본 건 (cf8cd19) |
|
|---|---|---|
| 버튼 구성 | Survival 신규 7종 + "구 아웃게임" 1종 | 구 UGUI 직행 9종 (신규 0종) |
| 과거 화면 도달 | 8번째 버튼 1개 뒤에 숨음 | 9개 버튼이 전부 과거 화면 |
| 화면 지정 | 불가 (구 로비 첫 화면 고정) | 5화면 + 카드 4탭 개별 직행 |
최종 버튼 목록 (위→아래): 로비 / 카드 / └ 아이템 (카드뽑기) / └ 영웅 / └ 룬 / └ 스킬 (원작 미구현) / 강화 / 컨텐츠 / 상점 (원작 미구현)
근거
- 중복의 실체 — 제거한 7종은 이미 로비·영웅 패널에 자체 진입 경로가 있다. 임시 메뉴에 다시 두는 것은 같은 기능의 2번째 입구일 뿐이고, PD 화면에서는 "새로 만든 UI가 겹쳐 보이는" 현상으로 나타난다.
- 전환 경로 = 구 하단 메뉴와 동일 —
MainMenuUIEvents.{Lobby|Card|Upgrade|Contents|Shop}ScreenShow는public static Action이고(Assets/Script/UI/Events/MainMenuUIEvents.csL6-10), 구 하단 메뉴UGUIMainMenuViewL54-58 이 바로 그 이벤트를 Invoke 한다. 따라서 임시 메뉴에서 같은 이벤트를 쏘는 것은 구 메뉴 클릭과 동일 경로다. 리플렉션 0·구 컨트롤러 신규 public API 0. - 카드 탭 직행 —
UGUICardView.OnTabClicked는 private 이지만 탭Button.onClick은 public. 탭 노드를UGUIView.FindDeep으로 찾아onClick.Invoke()하면 정식 클릭과 동일 핸들러를 탄다(GetComponent<Button>()null 가드 포함).FindDeep은Transform.GetChild재귀라 비활성 자식도 찾는다. - "원작 미구현" 병기의 근거 —
UGUIShopView·UGUISkillContentView는 둘 다 15줄 · 본문 0(생성자만). 원작ShopView·SkillContentView와 동일한 빈 플레이스홀더다. 눌러도 빈 화면인 것이 정상이라는 사실을 라벨에 남겨 버그 오인을 차단한다.
기각안 (C32)
| 기각안 | 기각 사유 |
|---|---|
| Survival 신규 7종 존치 (구 UGUI 버튼만 추가) | PD 지적의 대상이 바로 그 7종의 중복 노출이다. 존치하면 지적을 해소하지 못한다. 또한 버튼이 16개가 되어 패널 세로 한계(BannerFrame03 하단 1629)를 넘는다 |
구 컨트롤러에 public void OpenScreenByName(string) 신규 추가 |
구 UI 코드 수정 = 원작 보존 원칙 위반. MainMenuUIEvents 로 리플렉션 없이 도달 가능하므로 불필요 |
리플렉션으로 OpenScreen(_cardView) 직접 호출 |
위와 같은 이유로 불필요. 필드명 변경에 취약하고 정식 클릭 경로와 갈라진다 |
씬(.unity) m_IsActive 를 1 로 되돌리기 |
PD 가 에디터로 테스트 중 — .unity/.prefab 편집 금지. 런타임 SetActive(true) 로 대체(씬 파일 원본 유지) |
| 패널을 아래로 늘려 9칸 확보 | 아래변 720 은 로비 Shadow 상단 713 과 7px 여유뿐. 대신 버튼 높이 86→72·피치 96→80 으로 축소해 기존 대역 안에 수용 |
★ 런타임 실검증 (직전 3회는 컴파일까지만 검증 — 본 건이 최초 실행 검증)
Play 진입 → 검증 → stop 완료. 씬·프리팹·에셋 저장 0건 (scene.isDirty=False 확인).
1. 임시 메뉴 렌더 실측 — TempNavPanel activeInHierarchy=True, size (226, 860), 화면 좌표 BL=(12,720) TR=(238,1580) (BannerFrame03 하단 1629 침범 없음). 자식 실측 = Header + 버튼 9종 + Footer. Survival 신규 버튼 0건.
2. "카드" 버튼 클릭 경로 (PD 지목 본체) — Btn_카드.onClick.Invoke() 실행 결과:
| 항목 | BEFORE | AFTER |
|---|---|---|
UGUIUIControllers activeSelf |
False | True |
씬 루트 UGUICanvas |
없음 | 신규 생성 · enabled=True · order 0 |
SurvivalLobbyCanvas enabled |
True (order 100) | False |
TempNavLegacyOverlay |
비활성 | 활성 · order 500 |
| 클릭 중 예외 | — | 0건 |
3. 실제로 화면에 뜬 것 — UGUICanvas ▸ MainDocument(Clone) ▸ safe-area ▸ [background, Header, ScreenView, MainMenu] 계층 실측:
LobbyScreen self=False UpgradeScreen self=False ContentsScreen self=False
CardScreen self=True ← 실제 표시 화면 ShopScreen self=False
MainMenu self=True Header self=True (구 상단바·하단 메뉴 동시 표시)
content--item self=True content--skill/rune/hero = False ← 기본 Item(카드뽑기) 탭
→ 구 UGUI 카드 화면이 실제로 화면에 떴다. 다른 화면 동시 노출 0건.
4. 9버튼 전건 클릭 실측 (각 클릭 후 활성 화면·탭 스냅샷 · 신규 에러 전건 0)
| 버튼 | 결과 | 에러 |
|---|---|---|
| └ 영웅 | SCREEN:CardScreen TAB:content--hero |
0 |
| └ 룬 | SCREEN:CardScreen TAB:content--rune |
0 |
| └ 스킬 | SCREEN:CardScreen TAB:content--skill |
0 |
| 강화 | SCREEN:UpgradeScreen |
0 |
| 컨텐츠 | SCREEN:ContentsScreen |
0 |
| 상점 | SCREEN:ShopScreen |
0 |
| 로비 | SCREEN:LobbyScreen |
0 |
| └ 아이템 | SCREEN:CardScreen TAB:content--item |
0 |
5. 복귀·왕복 — "GodDem 로비로" 클릭 → GodDemCanvas enabled=True / UGUICanvas enabled=False / 오버레이 비활성. UGUIUIControllers 는 켠 채 유지(캔버스만 토글). 재진입 2회차 MainDocument(Clone) 개수 1 → 1 = 중복 인스턴스화 0. 복귀 오버레이 Status 텍스트 = 빈 문자열(초기화 예외 0건).
구 UGUI 미표시 원인 — 규명 결과
본 건에서는 미표시가 발생하지 않았다(위 실측대로 실제 표시됨). 다만 "왜 안 뜰 수 있었는가"의 구조는 씬 직렬화 실측으로 확정했다 — Lobby.unity L762~770:
UGUIUIControllers m_IsActive: 0 ← 씬에서 꺼져 있음
_canvas: {fileID: 0} _uiRoot: {fileID: 0} ← 둘 다 미결선
_mainDocumentPrefab: MainDocument.prefab (결선 정상)
_styleTheme: UGUIStyleTheme.asset (결선 정상)
→ _canvas 가 null 이라 EnsureCanvas() 가 캔버스를 새로 만들고 sortingOrder 는 기본값 0. GodDem 로비 캔버스는 100 이므로 켜기만 해서는 100 아래에 깔려 영원히 안 보인다. GodDem 캔버스를 끄는 것이 표시의 필요조건이며, 본 코드가 그것을 수행한다(실측 SurvivalLobbyCanvas enabled=False).
경쟁 캔버스 실측 — MainCanvas(order 0, 자식 0개)·UGUIRoot(order 0, 활성 그래픽 0개)로 표시 내용이 없고, UGUICanvas 는 씬 루트 중 siblingIndex 21(최후미)이라 동순위 중 최상단에 그려진다. 가림 요소 없음.
감사 지적 대응 (pm-auditor 사전 감사 — 매니페스트 2026-08-25_1047)
| 지적 | 판정 | 조치 |
|---|---|---|
| C-1 전제(af78882 미표시) 미검증 상태의 전면 재설계 | 부분 수용 | 감사관 지적대로 "PD가 버튼을 못 본 이유"는 두 갈래였다. 런타임 실검증으로 확인한 사실: af78882 의 전환 로직은 정상 동작한다. 따라서 본 건의 성격은 **"동작 실패의 수정"이 아니라 "진입점 1개 → 9개 확장 + 신규 7종 제거"**다. 커밋 메시지·본 엔트리 모두 이 표현으로 통일했다 |
| M-1 신규 PD 지적 미등재 (3회차) | 수용 | 공유/PD_지시_트래킹/개발팀_PD_지시_로그.md BT13-GodDem 행에 PD 원문 인용으로 등재 완료(표 무결 검증 pipe count 8·1행 in/out) |
| M-2 git 추적 영역 백업 불요 | 기록 · 미적용 | 감사관 논지(백업 자체가 불요, 롤백은 git checkout)는 타당하다. 다만 ①PM 발주서가 백업을 명시 지시했고 ②백업 위치가 Unity 프로젝트 밖(E:\BurningTimes\공유\개발팀_백업\GodDem\)이라 감사관이 우려한 CS0111 중복 멤버 컴파일 오염은 발생하지 않는다(Assets/ 내부가 아님). 파일명은 표준 준수 SurvivalLobbyController.TempNav.cs.bak_20260825_1043.cs. 롤백 경로: git checkout af78882 -- Assets/Script/Survival/SurvivalLobbyController.TempNav.cs. 백업 존치/폐지 방침은 PD·PM 결정 영역으로 상신 |
| M-3 매니페스트 미등록 | 수용 | 편집 착수 후 인지 → manifest_register.sh 로 2026-08-25_1047 등록 완료 |
T-1 MainMenuUIEvents 이중 구독 → 두 화면 동시 노출 위험 |
수용 · 실측 해소 | 감사관 지적대로 UI Toolkit LobbySceneUIController L109-113 이 같은 이벤트를 구독한다. 씬 실측: 해당 UIControllers 오브젝트는 m_IsActive: 0(Lobby.unity L1806~1822) → OnEnable 미실행 → 구독 자체가 발생하지 않는다. 런타임 실측에서도 활성 화면은 항상 1개뿐이었다. 단 씬에서 UIControllers 를 켜면 이 위험이 즉시 실현된다 — PD·PM 인계 사항 |
| T-2 버튼 증가에 따른 레이아웃 한계 초과 | 수용 · 반영 | 버튼 높이 86→72·피치 96→80 으로 축소. 패널 상단 1580 < BannerFrame03 하단 1629 (여유 49px, 직전 13px 대비 개선). 실측 좌표로 확증 |
| T-3 빈 화면 버튼 = PD 재지적 직결 | 수용 · 반영 | 상점·카드 스킬 탭 버튼에 "(원작 미구현)" 병기 + 전용 색상 분리. 소스 실측으로 근거 확인(양 클래스 15줄·본문 0) |
| T-4 ContentsScreen 무가드 인덱싱 크래시 위험 | 수용 · 실측 결과 미발생 | 런타임에서 컨텐츠 버튼 클릭 시 예외 0건, SCREEN:ContentsScreen 정상 전환. 위험 자체는 코드에 잔존하므로(데이터 상태 의존) 기록만 남긴다 |
T-5 탭 노드 Button 여부 미확인 |
수용 · 가드 포함 | GetComponent<Button>() null 가드 후 onClick.Invoke(). 런타임에서 4탭 전건 정상 동작 확인 |
감사관 C14-7 경고 준수 — 스크린샷 0장 사용. 좌표·활성 상태·계층·캔버스 order 전부 텍스트 실측으로 처리했다.
코드 변경 요지
TnEnterLegacyOutgame→ bool 반환으로 변경. 전환 실패 시 화면 전환 이벤트를 쏘지 않는다. (실패 상태로 이벤트만 쏘면OpenScreen의_currentView == view가드에 걸려 다음 진입이 영구 무반응이 되는 함정 — 사전 차단)TnGoLegacy(showScreen, tabNodeName)공통 경로 신설 — 전환 → 화면 → 탭 3단.TnClickLegacyTab(name)신설 — 탭 Button 탐색·null 가드·onClick.Invoke(). 미발견 시 화면은 유지하고 복귀 오버레이에 사실 표기.- 제거:
TnOpenHeroChild·TnOpenGachaTabs(Survival 신규 시스템 전용 — 중복 노출원).
검증
- 컴파일:
CompilationPipeline.RequestScriptCompilation(CleanBuildCache)clean rebuild 수행 →error CS0건.TempNav.cs를 인용한 진단 0건(grep 실측). - 잔존 경고 요지(전부 기존 파일·본 파일발 0·기저선 동일) — 게임 코드측 CS0618/CS0414 6종 원문 인용:
Assets\Script\Core\Patterns\Singleton.cs(10,29): warning CS0414: The field 'Singleton<T>.applicationIsQuitting' is assigned but its value is never usedAssets\Script\Core\Patterns\Singleton.cs(52,40): warning CS0618: 'Object.FindObjectOfType(Type)' is obsoleteAssets\Script\Core\Patterns\Singleton.cs(54,29): warning CS0618: 'Object.FindObjectsOfType(Type)' is obsoleteAssets\Script\Survival\SurvivalLobbyController.cs(97,17): warning CS0618: 'Object.FindObjectOfType<T>()' is obsoleteAssets\Script\UGUI\UGUILobbySceneUIController.cs(152,17): warning CS0618: 'Object.FindObjectOfType<T>()' is obsoleteAssets\Script\UGUI\UGUIBattleSceneUIController.cs(112,17): warning CS0618: 'Object.FindObjectOfType<T>()' is obsolete- 그 외는 전부
Assets\Spine\**외부 패키지발.
- 런타임 에러 1건은 본 건 무관 · 기존 결함 —
Error loading asset bundle from E:/NerdNavis/GodDem/Assets/StreamingAssets\StandaloneWindows\csv: HTTP/1.1 404 Not Found. 실측으로Assets/StreamingAssets/StandaloneWindows디렉토리 자체가 부재(Directory.Exists=False) 확인 — BaseLoading 단계 기존 이슈. - C19 구 UGUI 무수정 확증: 커밋 파일 1건(
SurvivalLobbyController.TempNav.cs)만.Assets/Script/UGUI/0건,.unity/.prefab0건. - 씬 무변경 확증: Play 종료 후
EditorSceneManager.GetActiveScene().isDirty=False.
PD 안내
- 사용법 — 로비 좌측 "과거 메뉴" 패널(분홍 헤더). 9개 버튼이 전부 과거 UGUI 화면이다. 아무거나 누르면 즉시 그 화면으로 간다. 복귀는 우상단 "GodDem 로비로" 하나뿐(직전 화면 그대로 보존).
- 재컴파일 필요 — 기존
.cs수정이라 도메인 리로드가 발생한다. 진행 중이던 Play 세션은 끊긴다. Play 중지 → 재생 1회(자동 리프레시가 안 걸리면 Ctrl+R). 단 본 세션에서 이미 컴파일까지 완료해 두었다. - "(원작 미구현)" 2종은 눌러도 빈 화면이 정상 — 상점·카드 스킬 탭. 원작부터 본문이 없는 플레이스홀더이며 버그가 아니다.
- 구 로비의 "시작" 버튼 주의 —
Battle씬으로 이동한다(GodDem 전투SurvivalBattle아님). 씬이 바뀌면 Lobby 로 돌아온 뒤 과거 메뉴부터 다시 눌러야 한다. - 골드·젬은 양쪽이 같은 지갑 — 구 화면에서 뽑기·강화로 소비하면 Survival 로비 재화가 실제로 줄어든다. 재활용 판단 시 이 축이 유일한 실질 충돌이다.
- 본 패널은 여전히 임시(proxy) — 도달점은 "무엇이 살아 있는지 눈으로 확인"까지다. 기능 재이식은 하지 않았고 구 UI 코드도 수정 0건이다. PD 가 재활용 대상을 확정하면 그때 GodDem 신 UI 로 이식한다.
PM 인계
- push 미실시 —
cf8cd19는 GodDem 로컬 커밋까지. push 는 PM 영역(지시 준수). - BT 레포 커밋 미실시 — 본 엔트리·PD 지시 로그 갱신분은 작업 트리 상태로 둔다(지시 준수).
- 매니페스트
2026-08-25_1047잔존 —manifest_archive.sh는 BT HEAD 커밋과 cross-check 하는데 본 집행 커밋은 GodDem 레포에 있어 조건 미성립. BT 커밋·push 시 자동 이동 예상. - 감사 M-2 상신 안건 — "git 추적 영역 코드의 백업 존치/폐지" 방침. 감사관은 폐지(롤백 =
git checkout)를 권고했고 PM 발주서는 백업을 지시했다. 규칙 방향 수준이라 PM·PD 결정 영역(C36). - T-1 잠재 위험 기록 — 씬에서 UI Toolkit
UIControllers(m_IsActive: 0)를 켜면MainMenuUIEvents이중 구독으로 두 스택이 동시에 화면을 띄운다. 현재는 꺼져 있어 무해하나, 향후 UI Toolkit 측을 되살릴 경우 본 임시 메뉴가 이중 노출을 유발한다.
113. 임시 메뉴 과거 메뉴 재구성 push — 런타임 실검증 최초 성공 (PM·2026-08-25)
- PM push: GodDem
af78882..cf8cd19origin 반영. 임시 메뉴 = "과거 메뉴" 9종(로비·카드·└아이템(카드뽑기)·└영웅·└룬·└스킬(원작 미구현)·강화·컨텐츠·상점(원작 미구현)) + 복귀 1. Survival 신규 7종 전량 제거(PM 지시 오류로 만든 중복 노출 해소) - ★ 런타임 실검증 최초 수행(4회 연속 코드·컴파일 한정 검증 관행 종결): Play 진입→9버튼 전건 클릭→stop. 예외 0건. 카드 클릭 시
UGUIUIControllersactiveSelf False→True·UGUICanvas신규 생성(order 0)·SurvivalLobbyCanvasenabled=False·계층 실측CardScreenself=True/나머지 4화면 False/content--item활성 = 구 UGUI 카드 화면 단독 표시·중복 0. 탭 4종 각각 정확 전환·왕복 2회차MainDocument(Clone)1 유지(중복 인스턴스화 0) - 전환 기전: 리플렉션·신규 public API 불요 — 구 하단 메뉴
UGUIMainMenuViewL54-58이 쏘는MainMenuUIEvents.*ScreenShow정적 이벤트를 그대로 Invoke. 탭은Button.onClick.Invoke()= 정식 클릭과 동일 핸들러 - 표시 필요조건 확정: 씬 직렬화
_canvas/_uiRoot둘 다 fileID 0 →EnsureCanvas()가 order 0 캔버스 생성 → GodDem(100) 아래 영구 매몰. GodDem 캔버스 차단이 표시의 필요조건(코드가 수행). 경쟁 캔버스 가림 요소 0 확인 - PM 인계 (T-1): UI Toolkit
LobbySceneUIController가 동일 이벤트를 구독 — 씬의UIControllers(m_IsActive 0)를 켜는 순간 두 화면 동시 표시. 구 UI Toolkit 스택 취급 결정 시 선행 확인 필요 - 프레이밍 정정 (C-1):
af78882전환 로직은 정상 동작이었음 — 본 건은 "동작 실패 수정"이 아니라 진입점 1→9 확장 + 신규 7종 제거. PD 미표시 체감의 실제 원인 = 임시 메뉴에 과거 메뉴 진입점이 사실상 1개뿐이었던 PM 구성 오류 - 검증: clean rebuild error CS 0·TempNav 발 진단 0·잔존 경고 기저선 동일. 런타임 에러 1건은 기존
StreamingAssets/csv404(디렉토리 자체 부재)