BurningTimesAi/공유/기획/GodDem/2026-08-20_UI개편_설계_위임_v1.md

95 lines
7.2 KiB
Markdown
Raw Permalink Normal View History

# GodDem UI 전면 개편 설계·위임 SOT v1
> **작성**: Fable5 (총괄PM) 2026-08-20 · **PD 지시**: Layer Lab GUI Pro-SuperCasual 에셋으로 아웃게임 UI 전면 개편 + 인게임 UI 재구성
> **위임 구조**: Fable5 설계 → 개발팀장(Opus) 검토·구현·검증 (C49) · 화면 단위 순차
> **원칙**: 원작 Wild Survival = Layer Lab과 동일 SuperCasual 스타일이므로 참조 화면 그대로 재현
---
## 0. 에셋 도입 완료 상태 (선행 완료)
- **위치**: `E:\NerdNavis\GodDem\Assets\GUIPro\` (ResourcesData + Prefabs, GUID 유지 복사)
- **규모**: 프리팹 534종 · 스프라이트 993종 · 커스텀 스크립트 **0개**(순수 비주얼)
- **완성 화면 프리팹** (`Assets/GUIPro/Prefabs/Prefabs_DemoScene_Panels/`):
| PD 지정 | 프리팹 | 용도 |
|---------|--------|------|
| 로비 | `Lobby.prefab` | 아웃게임 메인 |
| 상점 | `Shop.prefab` | 재화/패스/데일리 |
| Hero | `Equipment.prefab` + `Collection_List.prefab` | 캐릭터 장비·강화 (스크롤) |
| 인게임 | `Play_UI_Action.prefab` / `Play_UI_Idle.prefab` | 전투 HUD |
| 스킬선택 | `Play_UI_ChoiceSkill.prefab` | 레벨업 3종 택1 |
| 승리 | `PopupDim_Play_Result_Victory.prefab` | 결과 |
| 패배 | `PopupDim_Play_Result_Defeat.prefab` | 결과 |
| 레벨업 | `PopupFull_LevelUp.prefab` / `PopupFull_CharacterLevelUp.prefab` | 연출 |
| 장비상세 | `Popup_EquipmentItemInfo02_*.prefab` (등급별 6색) | 팝업 |
- **컴포넌트 프리팹**: `Prefabs_Component_Buttons`(70)·`_Frames`(200)·`_Labels`(53)·`_Popups`(36)·`_Sliders`(48)·`_UI_Etc`(41)
- **아이콘**: `Icon_ItemIcons/Original/` — Gear_Sword/Ring/Boots/Hat/Armor(장비), Chest_Gem/Gold/Premium(상자), Energy/Gem/Clover, Damage/Dungeon/Battle 등 / `Icon_ShopItem`(CoinPack·GemPack) / `Icon_GradeBadge`(등급)
## 0-1. ⚠️ 필수 계약 3가지 (위반 시 깨짐)
1. **한글 폰트 교체**: Layer Lab 프리팹의 모든 `TMP_Text.font`는 Cairo/Sen(한글 미지원)이다. 반드시 `Assets/Resources/Fonts/ONEMobilePOP SDF.asset`(또는 `Assets/UGUI/Fonts/ONEMobilePOP_TMP.asset`)으로 교체. 텍스트도 한국어로.
2. **CanvasScaler**: GodDem 표준 = ScreenSpaceOverlay, Reference 1080×1920, ScaleWithScreenSize, Match=Expand. Layer Lab 프리팹 임포트 후 이 값으로 통일.
3. **Unity MCP 단일 인스턴스**: 위임 에이전트는 한 번에 하나만 Unity를 조작한다. 병렬 금지.
---
## 1. 인게임 UI (Phase A — 최우선, SurvivalBattle 직결)
**대상 씬**: `Assets/Scenes/SurvivalBattle.unity`
**현재**: `SurvivalHUD.cs`(IMGUI) — 이걸 Layer Lab UGUI 프리팹으로 교체
**데이터 소스**: `SurvivalBattleManager.Instance` (public API 이미 존재)
| Layer Lab 프리팹 | 대응 GodDem 데이터 | 참조 화면 |
|------------------|---------------------|-----------|
| `Play_UI_Action.prefab` | 상단: `Gold`(코인)·`Wave/Stage`·`Enemies.Count`(킬)·경험치바(`Exp`/`RequiredExp`)·`Level` / 하단: `Player.Hp/MaxHp` 체력바 | `4_Play_UI_Action` |
| `Play_UI_ChoiceSkill.prefab` | `PendingSkills`(3종) → 카드 아이콘/이름(`Name`)/설명(`Desc`)/등급(`Grade`). 선택 → `ChooseSkill(i)` | `4_Play_UI_ChoiceSkill` |
| `PopupDim_Play_Result_Victory.prefab` | 스테이지 클리어(웨이브 10 완주) 시. REWARDS = 획득 골드. `Continue` → 다음 스테이지/로비 | `9_Play_Result_Victory` |
| `PopupDim_Play_Result_Defeat.prefab` | `IsGameOver` 시. REWARDS = 골드. `Continue``Restart()` 또는 로비 | `9_Play_Result_Defeat` |
**능력치 강화 패널**(원작 3탭 가로행)은 `Play_UI_Action` 하단에 통합. Layer Lab `Prefabs_Component_Buttons` + `ItemMatchHomeBaseUpgrade` 스타일 행으로 `SurvivalBattleManager.Upgrades.Tracks` 12종 표시, `TryUpgrade(i)` 연결.
**신규 스크립트**: `SurvivalUIController.cs`(MonoBehaviour) — 프리팹 인스턴스를 Instantiate하고 `SurvivalBattleManager` 필드에 바인딩. `SurvivalHUD`(IMGUI) 제거. 매 프레임 값 갱신(코루틴/Update).
## 2. 아웃게임 UI (Phase B — 로비/상점/영웅)
**대상 시스템**: `Assets/Script/UGUI/*.cs`(활성 UGUI) — UITK(`Assets/Script/UI/`)는 비활성 레거시, 건드리지 않음
**진입점**: `UGUILobbySceneUIController` + `MainDocument.prefab` (런타임 Instantiate)
**강결합 계약**: ①kebab-case 노드 이름(`Q<T>("start-button")` 등) ②이벤트 버스(`MainMenuUIEvents`/`ModalEvents`/`TabEvents`) ③재화 옵저버(`CurrencyManager.Get` + `ObserverManager.AddObserver(GenerateItemTypeKey(GOLD_ID/GEM_ID))`)
| 화면 | Layer Lab | GodDem 연결 | 참조 |
|------|-----------|-------------|------|
| 로비 | `Lobby.prefab` | `UGUILobbyView` — PLAY → `SceneManager.LoadScene("SurvivalBattle")`(신규 인게임으로 변경). 재화 헤더 = `UGUIHeaderView` 계약 | `1_Lobby` |
| 상점 | `Shop.prefab` | `UGUIShopView`(현재 빈 껍데기) 채움 — GEM PACK/GOLD PACK/DAILY. `CurrencyManager` 재화 | `13_Shop_1/2` |
| Hero | `Equipment.prefab` | 신규 Hero 뷰 — 캐릭터 + 장비 슬롯 + Attack/HP + 스크롤 인벤토리. SurvivalBattle 강화 or 별도 메타 | `6_Equipment` |
| 하단 탭 | `Lobby.prefab` 내 네비 | `UGUIMainMenuView` 5버튼 계약(`menu__*-button`) | `1_Lobby` 하단 |
**접근 방식**: 기존 `MainDocument.prefab`(13만 라인·nested 6331)을 수정하기보다, **Layer Lab 화면 프리팹을 신규 배치**하고 노드에 kebab-case 이름을 부여해 기존 뷰 코드와 결선하거나, 뷰 코드의 조회 문자열을 새 노드명에 맞춰 수정. 개발팀장이 프리팹 규모를 보고 방식(스킨 교체 vs 재구축) 판정.
## 3. 자율 판단 영역 (PD 위임)
나머지 화면(모달·팝업·토스트·설정 등)은 개발팀장이 Layer Lab 대응 프리팹을 자율 매핑:
- 게임결과 모달 `UGUIGameResultModal``PopupDim_Play_Result_*`
- 가챠결과 `UGUIGachaResultModal``PopupFull_RewardItems`/`Popup_Chest`
- 설정 `UGUISettingModal``Settings.prefab`
- 일시정지 `UGUIPauseModal``Popup_Close`/`Popup_OtherPopup_01`
- 토스트 → `Popup_Toast`
- 등급 뱃지 `UGUIGradeBadge``Icon_GradeBadge`
## 4. 위임·분할 계획
| Phase | 범위 | 위임 | 검증 |
|-------|------|------|------|
| **A** | 인게임 4화면 (Action/ChoiceSkill/Victory/Defeat) + 강화패널 | 개발팀장(Opus) → 클라이언트팀(Sonnet) | Play 스크린샷 |
| **B1** | 로비 (Lobby.prefab + 하단탭 + 헤더) | 개발팀장 | Play 스크린샷 |
| **B2** | 상점 (Shop.prefab) | 개발팀장 | Play 스크린샷 |
| **B3** | Hero (Equipment.prefab) | 개발팀장 | Play 스크린샷 |
| **C** | 자율 매핑 (모달·팝업·토스트) | 개발팀장 | 종합 |
각 Phase는 Unity MCP 단일 인스턴스라 **순차 진행**. Phase A부터.
## 5. 저작권·주의
- Layer Lab GUI Pro-SuperCasual = **PD 구매 상용 에셋**(정당 사용). 원작 Wild Survival 리소스(저작권 침해)와 다름 — 이 에셋은 자유롭게 사용.
- 기존 GodDem UGUI 시스템은 유닛 소환 대전형 메타(가챠/카드/룬)라 SurvivalBattle과 데이터가 다름. 아웃게임은 SurvivalBattle에 맞게 재구성하되 재화(CurrencyManager)는 재사용.
- IMGUI `SurvivalHUD`는 Phase A 완료 후 제거.