docs(BT13-GodDem): UI 개편 설계 SOT + Phase A 완료 검증 기록

- UI개편 설계·위임 SOT v1 (Layer Lab 에셋·필수계약·Phase A~C 분할)
- Phase A 인게임 UI 완료: SurvivalHUD(IMGUI)→Layer Lab UGUI 4화면, PM 스크린샷 직접검증
- 도구 자동화 근본원인: dontAsk 세션시작 로드·재시작 해결. allow 위임도구 보강
- GodDem cc3ff8d 연계

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-08-20 09:42:59 +09:00
parent adb5a33b02
commit 5c1a6adca1
3 changed files with 127 additions and 1 deletions

View File

@ -3,7 +3,8 @@
"permissions": {
"defaultMode": "dontAsk",
"additionalDirectories": [
"E:\\NerdNavis\\GodDem"
"E:\\NerdNavis\\GodDem",
"C:\\Users\\sw\\Downloads\\Layer Lab"
],
"allow": [
"Read",
@ -12,6 +13,16 @@
"TodoWrite",
"ToolSearch",
"Agent",
"Task",
"SendMessage",
"TaskOutput",
"TaskStop",
"Workflow",
"EnterPlanMode",
"ExitPlanMode",
"AskUserQuestion",
"SendUserFile",
"Artifact",
"Edit",
"Write",
"Edit(.claude/**)",

View File

@ -0,0 +1,94 @@
# 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 완료 후 제거.

View File

@ -123,5 +123,26 @@
- **검증**: Play 실측 — 공격 탭(공격력·공격속도·피해증가·치명타확률·치명타피해·관통)·방어 탭(체력·체력고정·피해감소·방어력·회피) 정상 출력, 비용 10G·증가량 원작값 표시 확인.
- **교훈**: 원작 재현 요구에서 **UI 프리팹 계층·RectTransform 덤프**가 데이터 테이블만큼 결정적 근거가 된다. 이미지가 평문이면 레이아웃도 복원 가능.
## 6-F. UI 전면 개편 — Layer Lab 에셋 도입 (2026-08-20)
- **PD 지시**: 아웃게임 UI를 Layer Lab GUI Pro-SuperCasual 에셋으로 전면 개편 + 인게임 UI 재구성. 5+2 화면 지정 — ①상점(첨부 원작 SHOP 스타일=13_Shop) ②Hero(6_Equipment·13_Shop 스크롤) ③승리(9_Play_Result_Victory) ④패배(9_Play_Result_Defeat) ⑤인게임(4_Play_UI_Action·Idle) + 로비(1_Lobby) + 나머지 자율 판단. **"Fable5가 설계 후 Opus/Sonnet에게 위임"** 명시. "승인 기다리지 말고 자율 수행".
- **에셋 실측**: `C:\Users\sw\Downloads\Layer Lab\GUI Pro-SuperCasual`. **결정적 발견** — 원작 Wild Survival과 **동일한 SuperCasual 스타일**이며, 지정 화면 전부 **완성 프리팹으로 존재**(Lobby·Shop·Equipment·Play_UI_Action/Idle/ChoiceSkill·PopupDim_Play_Result_Victory/Defeat). `4_Play_UI_Action`=우리 인게임(중앙고정+사방적+조이스틱)과, `4_Play_UI_ChoiceSkill`=우리 레벨업 3종 택1과 구조 동일.
- **에셋 도입**: `Assets/GUIPro/`로 ResourcesData(82M)+Prefabs(28M) 복사 (GUID 유지). 프리팹 534·스프라이트 993·**커스텀 스크립트 0**(순수 비주얼). PSD(635M 원본)·Scene 제외. Layer Lab = **PD 구매 상용 에셋**(정당 사용, 원작 Wild Survival 저작권 침해분과 구분).
- **GodDem 아웃게임 구조 실측**(Explore): UGUI 시스템만 활성(UITK 비활성 레거시). 뷰는 kebab-case 노드 강결합·이벤트 버스(MainMenuUIEvents/ModalEvents)·재화 옵저버(CurrencyManager+ObserverManager). 승/패=단일 UGUIGameResultModal, 상점=빈 껍데기. 씬전환 `UGUILobbyView`→`LoadScene("Battle")`.
- **설계 SOT**: `공유/기획/GodDem/2026-08-20_UI개편_설계_위임_v1.md` — 에셋·필수계약 3종(한글폰트 ONEMobilePOP·CanvasScaler·Unity 단일인스턴스)·화면 매핑·Phase A~C 분할.
### 6-F-1. Phase A 인게임 UI — 완료·검증 (GodDem `cc3ff8d`)
- **위임**: 개발팀장(Opus) → C48 근거(Unity 단일인스턴스·정밀 바인딩)로 팀장 직접 구현. 세션 재시작으로 1차 중단 → 2차 재위임 완료.
- **산출**: `SurvivalUIController.cs` 신규(프리팹 Instantiate + SurvivalBattleManager 바인딩 + 한글폰트 런타임 교체 + 클릭핸들러 코드주입). `SurvivalBattle.unity` — SurvivalHUD(IMGUI) 컴포넌트 제거, SurvivalUICanvas(1080×1920 Expand) 배치.
- **PM 직접 검증**(feedback_pm_image_verification_skip 준수 — 스크린샷 4장 실측): HUD(골드·1-1·킬·경험치·체력 + 강화 3탭 12종) / 스킬선택(3종 택1 [희귀]골드획득·[일반]공격력·[일반]경험) / 승리(왕관검 배너·보상·계속) / 패배(방패화살 배너·보상·다시시작). **한글 렌더링 정상, 콘솔 에러 0**. Layer Lab 스타일 완벽 재현.
- **개발팀장 정직보고 수용**: 폰트 계약 정정(`Resources/Fonts/ONEMobilePOP SDF`는 FontAsset 오타입 → `UGUI/Fonts/ONEMobilePOP_TMP` TMP_FontAsset 사용), 가짜 배경·미사용 노드(조이스틱·상자)·가짜 보상(젬300·상자) 숨김, 승리 트리거는 엔드리스 구조라 Stage 증가 감지로 설계(매니저 무수정).
- **미세 이슈**(후속): 보상 코인 숫자 아이콘 겹침(기능 정상), SurvivalHUD.cs 파일 존치(컴포넌트만 제거), Button_Pause 무동작, 적 개별 HP바 미구현.
### 6-F-2. Phase B 아웃게임 — 위임 중
- 로비(Lobby.prefab·PLAY→SurvivalBattle)/상점(Shop.prefab)/Hero(Equipment.prefab). 방향: SurvivalBattle에 맞는 심플 아웃게임(기존 가챠/카드/룬 메타는 데이터 불일치로 미이식, 재화만 CurrencyManager 재사용). 개발팀장(Opus) 위임 진행 중.
### 6-F-3. 도구 자동화 근본원인 규명
- PD 반복 불만("몇 번을 강조하냐"). **근본원인**: `permissions.defaultMode: dontAsk`**세션 시작 시점 1회 로드·고정**. 세션 도중 설정 변경은 defaultMode에 미반영 → 세션 중 처음 쓰는 도구(MCP·위임 도구)마다 프롬프트. **완전 해결 = 세션 재시작**. 조치: allow에 위임 도구(Task·SendMessage·Workflow 등) 전면 추가 + `settings.local.json` dontAsk. **PD 재시작 완료 → 이후 프롬프트 소멸 확인**.
## 7. 도구 자동 승인 후속 (PD 반복 지시)
- 세션 중 `dontAsk` 미적용(재시작 전) + 빌트인 도구 unknown 분류로 프롬프트 반복 발생 → user/project/local 3계층에 `ToolSearch`·`ReadMcpResourceTool`·MCP 리소스 도구·`.claude/**` 편집 allow 등록. `settings.local.json` 신설.