# BT12-MVP-A Phase 2-B B+C — Claude Desktop Unity MCP 위임 의뢰서 **작성**: 총괄PM (BurningTimes 본 worktree·`great-meitner-e16aee`) **일자**: 2026-05-08 **대상**: Claude Desktop dev-team-lead (또는 Sonnet) — Unity MCP 자동화 호출 주체 **환경**: PD PC (`E:/EerieVillage` Unity Editor 실행 + MCP for Unity 연동) **근거**: BurningTimes commit `259390f` 후속·PD 직접 발화 (2026-05-08·본 worktree 대화로그 엔트리 11 정합): > PD 원문 (2026-05-08): "단계1은 완료되었어. 단계2, 3은 개발팀에서 작업해줘(Assets/Prefabs/UI/SkillSelectionCanvas.prefab생성 포함)" → 단계 4 PD 후속. > > 본 PM이 4 옵션 (E·D·F·A) 카탈로그 보고 → PD 원문: **"E"** (옵션 E 채택). --- ## 0. 본 의뢰 배경 BurningTimes 본 worktree (Claude Code) 영역 = Unity MCP 직접 호출 X (Claude Desktop ↔ stdio uvx ↔ MCP for Unity 전용·`공유/조직공지/2026-04-22_Unity_MCP_연동_표준_워크플로우_v2.md` §1.3). PD 직접 발화 결정 = **옵션 E (Claude Desktop 별도 세션 Unity MCP 위임)** 채택. 본 의뢰서 = Claude Desktop 새 세션 dev-team-lead 또는 Sonnet 첨부 작업 의뢰. **산출물 외연 분리 (C36 PM 자율 외연 정합 명시)**: - **PD Editor 직접 영역** = `BT12-MVP-A_Phase2B_PDEditor가이드.md` (직전 commit `259390f`·옵션 D). PD 채택 X = **보류 영역** (폐기 X·차기 영역 활용 가능). - **Claude Desktop Unity MCP 영역** = 본 의뢰서 (옵션 E). PD 채택 = **본 의뢰 진행**. **진행도**: - ✅ Phase 2-A 시스템 코드 + JSON (EerieVillage `047661c`) - ✅ Phase 2-B 코드 (UI 컴포넌트 2 + LevelUpManager 통합·EerieVillage `5b2b753`) - ✅ Phase 2-B asset 5 + meta 7 (EerieVillage `755a51c`) - ✅ 단계 1 (PD Editor 영역 Unity Editor 준비·Asset Refresh·5 asset import 정합) - ❌ **단계 2 (Prefab 생성) — 본 의뢰** - ❌ **단계 3 (Scene 통합) — 본 의뢰** - (단계 4 = PD Play 검증 — 단계 3 완료 후) --- ## 1. 환경 사전 점검 | 점검 | 정합 | |------|------| | Unity Editor 영역 EerieVillage 프로젝트 열림 | 의무 | | MCP for Unity v9.6.6+ 연동 정합 (`mcp__unity__*` 도구 호출 가능) | 의무 | | Claude Desktop config = stdio uvx 방식 | 의무 (`공유/조직공지/2026-04-22_Unity_MCP_연동_표준_워크플로우_v2.md` §1.3 영역) | | EerieVillage `git pull origin main` (commit `755a51c` 반영) | 의무 | | `Assets/Data/SkillPlaceholders/` 5 asset import 정합 (Project 패널 표시) | 검증 | | Console error 0건 | 검증 | --- ## 2. 단계 2 — `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` 생성 ### 2-1. Hierarchy 구조 (28 GameObject·~30 Component) ``` SkillSelectionCanvas (root·Layer=UI) ├ Canvas (Render Mode=Screen Space-Overlay·Sort Order=200) ├ CanvasScaler (UI Scale Mode=Scale With Screen Size·Reference Resolution=1080×1920·Match=0.5) ├ GraphicRaycaster ├ SkillSelectionUI (Script·MyUI namespace·guid 1fa99265a1e5e354cbe04cb09a331bfc) │ └ SkillSelectionPanel (자식) ├ RectTransform (Anchor=stretch-stretch·offsetMin=0,0·offsetMax=0,0) ├ Image (Color r:0 g:0 b:0 a:0.78·Sprite=null·반투명 검정 배경) │ ├── Header (자식·RectTransform anchor=top stretch·height=120) │ ├ TitleText (GameObject) │ │ └ TextMeshProUGUI (Text="기술 선택"·Size=48·Bold·Alignment=Center·Color=white) │ └ CloseButton (GameObject·anchor=top right·size=80×80) │ ├ Button │ ├ Image (Sprite=null·Color white) │ └ TextMeshProUGUI (Text="✕"·Size=40·Center) │ ├── CardArea (자식·RectTransform anchor=middle center·size=900×600) │ ├ HorizontalLayoutGroup (spacing=40·childAlignment=Middle Center·controlChildSize=both) │ ├ SkillCardSlot1 (자식·SkillCardSlot 스크립트 부착·아래 2-2 영역) │ ├ SkillCardSlot2 (동일) │ └ SkillCardSlot3 (동일) │ └── Footer (자식·RectTransform anchor=bottom stretch·height=160) ├ PointText (GameObject) │ └ TextMeshProUGUI (Text="남은 포인트: 1"·Size=32·Alignment=Center·anchor=top center) └ ConfirmButton (GameObject·anchor=bottom center·size=300×80) ├ Button (interactable=false 초기) ├ Image (Sprite=null·Color white) └ TextMeshProUGUI (Text="확인"·Size=36·Center·Color=black) ``` ### 2-2. SkillCardSlot 자식 영역 (3 슬롯 동일·각 8 자식) 각 SkillCardSlot GameObject 영역 SkillCardSlot 스크립트 부착 (guid `808d8feb45d3a7345bad1f13adc27895`) + 자식 8개: ``` SkillCardSlot (root·size=280×600) ├ TopBanner (Image·anchor=top stretch·height=80·Color=Common 청록 default) ├ NameText (TextMeshProUGUI·anchor=top·offset=top 80·Text="카드명"·Size=32·Center) ├ IconArea (GameObject·anchor=middle center·size=200×200) │ ├ GlowEffect (Image·동심원·Sprite=null·Color white·Alpha 0.5) │ └ Icon (Image·anchor=center·size=160×160·Sprite=null) ├ LevelText (TextMeshProUGUI·anchor=middle center·offset middle 240·Text="레벨 1"·Size=24·Center) ├ DescriptionText (TextMeshProUGUI·anchor=bottom stretch·height=140·Text="효과 설명"·Size=18·Center·라인 4) ├ ClickArea (Button·anchor=stretch-stretch·offsetMin=0,0·offsetMax=0,0·전체 카드 영역) └ HighlightFrame (Image·anchor=stretch·offsetMin=-4,-4·offsetMax=4,4·Color yellow·Active=false) ``` ### 2-3. SkillSelectionUI 스크립트 영역 Inspector field 매핑 (8 field) | Field | 매핑 대상 | |-------|---------| | `_rootPanel` | SkillSelectionPanel (GameObject) | | `_titleText` | Header → TitleText → TextMeshProUGUI | | `_closeButton` | Header → CloseButton → Button | | `_slot1` | CardArea → SkillCardSlot1 (SkillCardSlot component) | | `_slot2` | CardArea → SkillCardSlot2 (SkillCardSlot component) | | `_slot3` | CardArea → SkillCardSlot3 (SkillCardSlot component) | | `_pointText` | Footer → PointText → TextMeshProUGUI | | `_confirmButton` | Footer → ConfirmButton → Button | ### 2-4. SkillCardSlot 스크립트 영역 Inspector field 매핑 (각 3 슬롯·8 field) | Field | 매핑 대상 | |-------|---------| | `_topBanner` | TopBanner (Image) | | `_nameText` | NameText → TextMeshProUGUI | | `_glowEffect` | IconArea → GlowEffect (Image) | | `_icon` | IconArea → Icon (Image) | | `_levelText` | LevelText → TextMeshProUGUI | | `_descriptionText` | DescriptionText → TextMeshProUGUI | | `_clickArea` | ClickArea (Button) | | `_highlightFrame` | HighlightFrame (Image) | ### 2-5. 색상 default (PD 예시 정합·SkillCardSlot.cs:34-36) - Common 청록 = (0.30, 0.70, 0.70, 1.0) - Rare 노랑 = (0.95, 0.70, 0.25, 1.0) - Max 빨강 = (0.90, 0.30, 0.30, 1.0) (런타임 영역 SkillCardSlot.Bind() 영역 rarity 영역 자동 적용 — 본 Prefab 영역 default = Common.) ### 2-6. Sprite placeholder 영역 현 시점 sprite asset 부재 → 다음 fallback (런타임 자동 처리): - 카드 배경 = Unity 기본 white sprite + 색상 변경 또는 9-slice null - 원형 아이콘 = Unity 기본 `Knob` sprite 또는 `UISprite` fallback (Unity Editor 영역 default sprite) - 동심원 빛 = sprite null → `_glowEffect.enabled = false` (SkillCardSlot.cs:55-59 자동) - Icon = `{fileID: 0}` reference null → `_icon.enabled = false` 자동 ### 2-7. Prefab 저장 1. Project 패널 영역 `Assets/Prefabs/UI/` 영역 (디렉토리 부재 시 신규 생성) 2. Prefab 영역 Save → `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` 정합 확증 --- ## 3. 단계 3 — Scene `Ingame.unity` 통합 ### 3-1. Scene 열기 1. Project → `Assets/Scenes/Ingame.unity` 활성 2. Hierarchy 영역 기존 GameObject 카탈로그 인지 (Player·Enemies·Foreground·IngameCanvas·EventSystem 등) ### 3-2. `[LevelUpManager]` GameObject 추가 1. Hierarchy 영역 root level 신규 Empty GameObject 2. 이름: `[LevelUpManager]` (대괄호 포함) 3. Transform: position=0,0,0·rotation=0,0,0·scale=1,1,1 4. Layer = Default ### 3-3. LevelUpManager 컴포넌트 부착 1. `[LevelUpManager]` 영역 Add Component → `LevelUpManager` (guid `2d141285d4c67174b9cb24f90fcde431`) 2. Inspector 영역 field 매핑 (단계 3-5 영역 후속): - `_pool` ← (자체 또는 자식 SkillCardPlaceholderPool component) - `_ui` ← (Scene 영역 SkillSelectionCanvas 인스턴스 영역 SkillSelectionUI component) ### 3-4. SkillCardPlaceholderPool 컴포넌트 부착 + asset 5 등록 1. `[LevelUpManager]` 영역 동일 GameObject 영역 Add Component → `SkillCardPlaceholderPool` (guid `be25627e1168e4f48a273684368704a1`) 2. Inspector 영역 `_allCards` (List) 영역 5장 등록: - Element 0 → `Assets/Data/SkillPlaceholders/A01_jineonbu.asset` - Element 1 → `Assets/Data/SkillPlaceholders/A05_hagikjin.asset` - Element 2 → `Assets/Data/SkillPlaceholders/P01_bonghwanggyeok.asset` - Element 3 → `Assets/Data/SkillPlaceholders/P12_saengmyeongkkot.asset` - Element 4 → `Assets/Data/SkillPlaceholders/AW01_cheonbugyeongmun.asset` 3. LevelUpManager `_pool` field → 본 Pool component drag ### 3-5. SkillSelectionCanvas Prefab 인스턴스 추가 1. Project → `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` Hierarchy 영역 root level drag 2. 인스턴스 이름: `SkillSelectionCanvas` (자동) 3. Prefab 영역 reference 매핑 영역 자동 정합 (단계 2-3·2-4 영역) ### 3-6. LevelUpManager `_ui` field 매핑 1. `[LevelUpManager]` 선택 → Inspector → LevelUpManager component 2. `_ui` field → Hierarchy 영역 SkillSelectionCanvas 인스턴스 → SkillSelectionUI component drag ### 3-7. Scene 저장 1. File → Save (Ctrl+S) 2. EerieVillage `git status` → `Assets/Scenes/Ingame.unity` (수정) + `Assets/Prefabs/UI/SkillSelectionCanvas.prefab`(.meta) (신규) 확증 --- ## 4. 검증 영역 ### 4-1. Editor 시각 검증 (작업 직후) - Hierarchy 영역 `[LevelUpManager]` + SkillSelectionCanvas 정합 표시 - Inspector 영역: - LevelUpManager `_pool`·`_ui` 정합 매핑 (Missing X) - SkillCardPlaceholderPool `_allCards` 5장 정합 (Element 0~4 모두 reference 정합) - SkillSelectionUI 8 field 정합 매핑 (Missing X) - SkillCardSlot ×3 영역 8 field 각 정합 매핑 (Missing X) - Console error 0건 ### 4-2. 회귀 검증 (Phase 1 §5-1 정합) | 기존 영역 | 영향 X 확증 | |------|------| | Enemy 16 인스턴스 patrol | 영향 X | | Player 컨트롤 | 영향 X | | Foreground·Background·Tilemap | 영향 X | | 기존 IngameCanvas/IngameUI/IngameChoiceSkillUI | 별도 root Canvas (Sort Order 분리·충돌 X) | | EventSystem | 영향 X | | BT5-Dev 발판·몬스터 시스템 | 영향 X | | BT7-Dev 자동 발동 | Time.timeScale=0 영역 검증 = 단계 4 PD Play 영역 | (단계 4 PD Play 검증 = 본 의뢰 영역 외 — 단계 3 완료 후 PD 직접 진행.) --- ## 5. 산출물 commit·push 영역 ### 5-1. EerieVillage 영역 commit (Claude Desktop dev-team-lead 또는 PM 영역) ```bash cd E:/EerieVillage git status --short # 예상 영역: # M Assets/Scenes/Ingame.unity # A Assets/Prefabs/UI/SkillSelectionCanvas.prefab # A Assets/Prefabs/UI/SkillSelectionCanvas.prefab.meta # A Assets/Prefabs/UI.meta (디렉토리 신규 시) git add Assets/Prefabs/UI Assets/Prefabs/UI.meta Assets/Scenes/Ingame.unity git commit -m "BT12-MVP-A Phase 2-B B+C: SkillSelectionCanvas.prefab + Scene Ingame 통합 - SkillSelectionCanvas.prefab 신규 (28 GameObject·3 SkillCardSlot·field 18+8×3=42 매핑) - Scene Ingame.unity 통합 ([LevelUpManager] + Pool 5 asset + Canvas 인스턴스) - BT12-MVP-A_Phase2B_ClaudeDesktop의뢰서.md 정합 C49 Phase 2 Claude Desktop 영역 Unity MCP 자동화 (PD 결정 E) Phase 3 dev-team-lead 검증 후속 (BurningTimes 본 worktree)" git push origin main ``` ### 5-2. BurningTimes 본 worktree 영역 후속 (PM 영역) EerieVillage commit·push 완료 후 BurningTimes 본 worktree 영역: - 대화로그 엔트리 추가 - PD 지시 트래킹 BT12-MVP-A 영역 산출물 갱신 - pm-auditor 통합 감사 + commit·push (본 의뢰 영역 외 — Claude Desktop 영역 완료 보고 영역 본 worktree PM 영역 후속.) --- ## 6. C49 의무 — Phase 2 본 의뢰 영역 - 본 의뢰 = **Phase 2 (집행)** 영역. Claude Desktop dev-team-lead 또는 Sonnet 영역 작업 주체. - **Phase 3 (검증)** = BurningTimes 본 worktree 영역 dev-team-lead 영역 후속 (Editor import 회귀·BT5-Dev/BT7-Dev 영향 검증). - 본 의뢰 영역 외 회귀 위험 영역 (Time.timeScale=0 영역 BT7-Dev 자동 발동) = 단계 4 PD Play 검증 영역. --- ## 7. 자료 인지 의무 (Read 선행) | 자료 | 절대 경로 | |------|------| | 본 의뢰서 | (본 파일 — Claude Desktop 새 세션 영역 첨부) | | Phase 1 설계서 | `E:/BurningTimes/프로젝트/EerieVillage/개발/spec/BT12-MVP-A_설계_v1.md` §2·§5 | | PD Editor 가이드 (참고) | `E:/BurningTimes/프로젝트/EerieVillage/개발/spec/BT12-MVP-A_Phase2B_PDEditor가이드.md` | | Unity MCP 가이드 v2 | `E:/BurningTimes/공유/조직공지/2026-04-22_Unity_MCP_연동_표준_워크플로우_v2.md` | | 신규 코드 (UI 2) | `E:/EerieVillage/Assets/Scripts/MyUI/{SkillSelectionUI,SkillCardSlot}.cs` | | 신규 코드 (Progression 6) | `E:/EerieVillage/Assets/Scripts/Progression/{LevelUpManager,SkillCardPlaceholderPool,SkillCardPlaceholder,...}.cs` | | asset 5 + meta 5 | `E:/EerieVillage/Assets/Data/SkillPlaceholders/*` | | Scene | `E:/EerieVillage/Assets/Scenes/Ingame.unity` | --- ## 8. Unity MCP 호출 절차 권고 Claude Desktop dev-team-lead (또는 Sonnet) 영역 호출 절차 (참고·실제 도구명·인자 영역 MCP for Unity v9.6.6+ 정합): ### 8-1. Prefab 생성 (단계 2) 1. `manage_asset` → 신규 Prefab 빈 생성 (`Assets/Prefabs/UI/SkillSelectionCanvas.prefab`) 2. `manage_gameobject` → Prefab 영역 root + Canvas + CanvasScaler + GraphicRaycaster + SkillSelectionUI component 부착 3. `manage_gameobject` → SkillSelectionPanel + Image + Header + CardArea + Footer 자식 추가 4. `manage_gameobject` → CardArea 영역 SkillCardSlot ×3 자식 + 각 8 자식 (TopBanner·NameText·IconArea·...) 추가 5. `manage_gameobject` → 각 component (Image·TextMeshProUGUI·Button·HorizontalLayoutGroup·SkillCardSlot 스크립트) 부착 6. `manage_gameobject` → field reference 매핑 (8 + 8×3 = 32 매핑) 7. Prefab 저장 ### 8-2. Scene 통합 (단계 3) 1. `manage_scene` → `Ingame.unity` 활성 2. `manage_gameobject` → root level `[LevelUpManager]` GameObject 신규 3. `manage_gameobject` → LevelUpManager + SkillCardPlaceholderPool component 부착 4. `manage_gameobject` → Pool `_allCards` List 영역 5 asset reference 매핑 5. `manage_gameobject` → SkillSelectionCanvas Prefab 인스턴스 root level drag 6. `manage_gameobject` → LevelUpManager `_ui` field → Canvas 인스턴스 SkillSelectionUI component reference 7. Scene 저장 ### 8-3. 검증 1. `manage_gameobject` → Hierarchy 영역 read·field 매핑 검증 2. `manage_editor` → Console error 0건 확증 3. EerieVillage `git status` → 변경 파일 정합 --- ## 9. 분량 — C50 - **Claude Desktop 영역 본 의뢰 작업 추정 = 80~150K** (MCP 호출 영역 + 검증 영역). - 초과 시 Claude Desktop 영역 PM 보고 영역 의무. - BurningTimes 본 worktree 영역 의뢰서 작성 분량 ~16K (본 파일). --- ## 10. 후속 영역 (작업 완료 후 PD 영역) 1. PD 영역 EerieVillage commit·push 정합 확증 2. PD 영역 BurningTimes 본 worktree 영역 PM 보고 (Claude Code 영역) 3. PM 영역 Phase 3 dev-team-lead 검증 호출 (Editor import 회귀·field 매핑 정합) 4. PD 영역 단계 4 Play 검증 (적 처치 → 레벨업 → UI 노출 → 카드 선택 → 게임 재개) 5. BT12-MVP-A 완료 아카이브 이동 --- **본 의뢰서 = Claude Desktop 새 세션 영역 dev-team-lead 또는 Sonnet 영역 첨부 영역**. **PD 영역 작업 절차**: 1. Claude Desktop 영역 새 세션 시작 2. 본 의뢰서 파일 첨부 (`E:/BurningTimes/프로젝트/EerieVillage/개발/spec/BT12-MVP-A_Phase2B_ClaudeDesktop의뢰서.md`) 3. Claude Desktop 영역 첫 메시지 = "이 의뢰서대로 진행해" 또는 "Unity MCP로 BT12-MVP-A Phase 2-B 단계 2·3 작업 진행" 4. Claude Desktop dev-team-lead → Unity MCP 자동화 → Prefab + Scene 통합 + EerieVillage commit·push 5. 완료 보고 PM (BurningTimes 본 worktree) → Phase 3 검증 후속