323 lines
43 KiB
Markdown
323 lines
43 KiB
Markdown
# 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 → 무충돌 유지
|
|
- 백업 `공유/개발팀_백업/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)` CS0618 `Object.FindObjectOfType(Type)` obsolete
|
|
- `Singleton.cs(54,29)` CS0618 `Object.FindObjectsOfType(Type)` obsolete
|
|
- `Singleton.cs(10,29)` CS0414 `applicationIsQuitting` assigned but never used
|
|
- `UGUIBattleSceneUIController.cs(112,17)` CS0618 `Object.FindObjectOfType<T>()` obsolete
|
|
- `UGUILobbySceneUIController.cs(152,17)` CS0618 `Object.FindObjectOfType<T>()` obsolete
|
|
- `SurvivalLobbyController.cs(97,17)` CS0618 `Object.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종)
|
|
|
|
1. 구 UGUI **초기화 성공 여부·각 화면 정상 표출** — Play 제어 금지로 런타임 확인 불가. 실태표 ③열은 전부 소스 근거 판정
|
|
2. **"GodDem 캔버스를 꺼야 보인다"는 sortingOrder 정적 추론** — `overrideSorting`·sortingLayer·카메라 구성은 미확인. 다만 어긋나더라도 복귀 버튼(order 500)이 살아 있어 갇히지 않는다
|
|
3. 프리팹 노드 8종의 **런타임 탐색 성공** — 직렬화 참조 유효 ≠ `Rect()`/`FindDeep` 탐색 성공
|
|
4. 구 UI 하위 기능(카드뽑기·영웅)의 **실동작**
|
|
5. **모달(order 10)·토스트(order 20) 캔버스는 포착 대상 밖** — `UGUIModalControllers`·`UGUIToastControllers`는 활성화 전부터 씬 루트에 있어 `beforeRoots` 차집합에 걸리지 않는다. 따라서 복귀 시에도 계속 활성으로 남는다. **의도적 선택**(C19 — 본 변경 이전부터의 씬 상태를 건드리지 않음). GodDem 캔버스(order 100)가 둘 다 덮으므로 시각·입력 영향은 없다고 판단하나 **미검증**
|
|
6. 세이브 분리(`save.txt` ↔ `survival_meta.json`)로 인해 구 UI 가 표시할 **데이터 상태**
|
|
7. `TnFirstActivateLegacy()`의 예외 포착이 실제로 무엇을 잡아낼지 — 특히 `UGUIContentsView`의 `TableManager.ExtraContents` 무가드 인덱싱
|
|
8. 복귀 오버레이 버튼(우상단 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 안내 (필수)
|
|
|
|
1. **사용법** — 로비 좌측 "임시 메뉴" 맨 아래 청록색 **"구 아웃게임"** 클릭 → 구 UGUI 아웃게임 표시. 우상단 **"GodDem 로비로"** 클릭 → 원래 로비 복귀(직전 화면 그대로 보존).
|
|
2. **재컴파일** — 기존 `.cs` 수정이므로 도메인 리로드가 발생한다. **진행 중이던 Play 세션은 끊긴다.** Play 중지 → 재생 1회 필요(자동 리프레시가 안 걸리면 Ctrl+R).
|
|
3. **구 로비의 "시작" 버튼 주의** — `Battle` 씬으로 이동한다(GodDem 전투 `SurvivalBattle` 아님). 눌러서 씬이 바뀌면 Lobby 씬으로 돌아온 뒤 임시 메뉴부터 다시 눌러야 한다.
|
|
4. **골드·젬은 양쪽이 같은 지갑이다.** 구 화면에서 뽑기·강화로 소비하면 Survival 로비 재화가 실제로 줄어든다. 재활용 여부 판단 시 이 축만 유일한 실질 충돌이다.
|
|
5. **초기화 예외가 나면** 우상단 복귀 버튼 아래에 붉은 글씨로 "초기화 예외 N건"이 뜬다. Console 원문을 그대로 남겨 뒀으니 그 내용을 알려 주시면 복구 범위를 판정한다. **임의 수정은 하지 않았다**(PM 지시 준수).
|
|
|
|
### 규칙 준수
|
|
|
|
- **C35-1 #2** — pm-auditor **사전 호출 + 판정 수령 후 커밋**(매니페스트 `2026-08-25_0200`, target `GodDem: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`/`.prefab` **0건**
|
|
- **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..af78882` origin 반영 — 임시 메뉴에 "구 아웃게임" 전환 + "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.cs` L6-10), 구 하단 메뉴 `UGUIMainMenuView` L54-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 CS` 0건**. `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 used`
|
|
- `Assets\Script\Core\Patterns\Singleton.cs(52,40): warning CS0618: 'Object.FindObjectOfType(Type)' is obsolete`
|
|
- `Assets\Script\Core\Patterns\Singleton.cs(54,29): warning CS0618: 'Object.FindObjectsOfType(Type)' is obsolete`
|
|
- `Assets\Script\Survival\SurvivalLobbyController.cs(97,17): warning CS0618: 'Object.FindObjectOfType<T>()' is obsolete`
|
|
- `Assets\Script\UGUI\UGUILobbySceneUIController.cs(152,17): warning CS0618: 'Object.FindObjectOfType<T>()' is obsolete`
|
|
- `Assets\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`/`.prefab` **0건**.
|
|
- **씬 무변경 확증**: Play 종료 후 `EditorSceneManager.GetActiveScene().isDirty=False`.
|
|
|
|
### PD 안내
|
|
|
|
1. **사용법** — 로비 좌측 **"과거 메뉴"** 패널(분홍 헤더). 9개 버튼이 **전부 과거 UGUI 화면**이다. 아무거나 누르면 즉시 그 화면으로 간다. 복귀는 **우상단 "GodDem 로비로"** 하나뿐(직전 화면 그대로 보존).
|
|
2. **재컴파일 필요** — 기존 `.cs` 수정이라 도메인 리로드가 발생한다. **진행 중이던 Play 세션은 끊긴다.** Play 중지 → 재생 1회(자동 리프레시가 안 걸리면 Ctrl+R). 단 본 세션에서 이미 컴파일까지 완료해 두었다.
|
|
3. **"(원작 미구현)" 2종은 눌러도 빈 화면이 정상** — 상점·카드 스킬 탭. 원작부터 본문이 없는 플레이스홀더이며 **버그가 아니다**.
|
|
4. **구 로비의 "시작" 버튼 주의** — `Battle` 씬으로 이동한다(GodDem 전투 `SurvivalBattle` 아님). 씬이 바뀌면 Lobby 로 돌아온 뒤 과거 메뉴부터 다시 눌러야 한다.
|
|
5. **골드·젬은 양쪽이 같은 지갑** — 구 화면에서 뽑기·강화로 소비하면 Survival 로비 재화가 실제로 줄어든다. 재활용 판단 시 이 축이 유일한 실질 충돌이다.
|
|
6. **본 패널은 여전히 임시(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..cf8cd19` origin 반영. 임시 메뉴 = **"과거 메뉴" 9종**(로비·카드·└아이템(카드뽑기)·└영웅·└룬·└스킬(원작 미구현)·강화·컨텐츠·상점(원작 미구현)) + 복귀 1. **Survival 신규 7종 전량 제거**(PM 지시 오류로 만든 중복 노출 해소)
|
|
- **★ 런타임 실검증 최초 수행**(4회 연속 코드·컴파일 한정 검증 관행 종결): Play 진입→9버튼 전건 클릭→stop. **예외 0건**. 카드 클릭 시 `UGUIUIControllers` activeSelf False→True·`UGUICanvas` 신규 생성(order 0)·`SurvivalLobbyCanvas` enabled=False·계층 실측 `CardScreen` self=True/나머지 4화면 False/`content--item` 활성 = **구 UGUI 카드 화면 단독 표시·중복 0**. 탭 4종 각각 정확 전환·왕복 2회차 `MainDocument(Clone)` 1 유지(중복 인스턴스화 0)
|
|
- **전환 기전**: 리플렉션·신규 public API 불요 — 구 하단 메뉴 `UGUIMainMenuView` L54-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/csv` 404(디렉토리 자체 부재)
|