# BT12-MVP-A Phase 2-B — PD Editor 직접 가이드 (B Prefab + C Scene 통합)

**작성**: 총괄PM (dev-team-lead Phase 1 보고서 §1-3·§2 인용)
**일자**: 2026-05-08
**대상**: PD Editor 영역 직접 작업
**범위**: SkillSelectionCanvas.prefab + Ingame.unity Scene 통합

---

## 0. 배경

BT12-MVP-A Phase 2-B 잔여 3 영역 중:
- **A. asset 5장** = ✅ 완료 (EerieVillage commit `755a51c` 영역)
- **B. SkillSelectionCanvas.prefab** = 본 가이드 §2
- **C. Scene 통합** = 본 가이드 §3

dev-team-lead Phase 1 권고 = B·C 영역 PD Editor 직접 (Unity Editor 시각 검증·layout 정밀 영역). yaml 직접 Write = 회귀 위험 큼·비권고.

---

## 1. 사전 환경 점검

| 점검 | 정합 |
|------|------|
| EerieVillage 영역 git pull (commit `755a51c`까지) | 의무 |
| Unity Editor 영역 EerieVillage 프로젝트 열기 | 의무 |
| Asset Refresh (Ctrl+R) | 의무 — asset 5장 import 확증 |
| Console 영역 error 0건 | 의무 |
| Project 패널 영역 `Assets/Data/SkillPlaceholders/` 영역 5장 표시 정합 | 검증 |

---

## 2. B 영역 — SkillSelectionCanvas.prefab 작성

### 2-1. 신규 Prefab 생성

1. Project 패널 → `Assets/Prefabs/UI/` 폴더 우클릭 → Create → Prefab Variant 또는 Create Empty Prefab
2. 파일명: `SkillSelectionCanvas`
3. 더블클릭 → Prefab 편집 모드

### 2-2. Hierarchy 구조 (dev-team-lead §1-3 정합)

```
SkillSelectionCanvas (root)
├ Canvas (Screen Space - Overlay·Sort Order=200)
├ CanvasScaler (Scale With Screen Size·1080×1920·Match=0.5)
├ GraphicRaycaster
├ SkillSelectionUI (script·MyUI namespace)
│
└ SkillSelectionPanel (자식)
   ├ Image (반투명 검정 r:0 g:0 b:0 a:0.78)
   ├ RectTransform (stretch-stretch·offset 0,0,0,0)
   │
   ├── Header
   │   ├ TitleText (TextMeshProUGUI·"기술 선택"·48pt·Bold·Center)
   │   └ CloseButton (Button + Image + TextMeshProUGUI "✕")
   │
   ├── CardArea (HorizontalLayoutGroup·spacing 40)
   │   ├ SkillCardSlot1 (자식 8개·아래 §2-3 영역)
   │   ├ SkillCardSlot2
   │   └ SkillCardSlot3
   │
   └── Footer
       ├ PointText (TextMeshProUGUI·"남은 포인트: 1")
       └ ConfirmButton (Button + TextMeshProUGUI "확인")
```

### 2-3. SkillCardSlot 자식 영역 (3 슬롯 동일)

각 SkillCardSlot 영역 8 자식 + SkillCardSlot 스크립트 부착:
1. **TopBanner** (Image) — 상단 색상 배너 (등급별 자동 변경)
2. **NameText** (TextMeshProUGUI) — 카드 이름 한글
3. **IconArea** (GameObject 부모)
   - **GlowEffect** (Image) — 동심원 빛
   - **Icon** (Image) — 원형 아이콘
4. **LevelText** (TextMeshProUGUI) — "레벨 N" 또는 "최대"
5. **DescriptionText** (TextMeshProUGUI) — 효과 설명 3~4 라인
6. **ClickArea** (Button) — 전체 카드 영역 stretch
7. **HighlightFrame** (Image·기본 inactive) — 선택 시 활성

### 2-4. SkillSelectionUI 스크립트 영역 reference 매핑

Inspector 영역 SkillSelectionUI component 영역 다음 18 field 영역 reference 매핑:

| Field | 매핑 대상 |
|-------|---------|
| `_rootPanel` | SkillSelectionPanel GameObject |
| `_titleText` | Header → TitleText |
| `_closeButton` | Header → CloseButton |
| `_slot1` | CardArea → SkillCardSlot1 |
| `_slot2` | CardArea → SkillCardSlot2 |
| `_slot3` | CardArea → SkillCardSlot3 |
| `_pointText` | Footer → PointText |
| `_confirmButton` | Footer → ConfirmButton |

### 2-5. SkillCardSlot 스크립트 영역 reference 매핑 (각 3 슬롯)

| Field | 매핑 대상 |
|-------|---------|
| `_topBanner` | TopBanner |
| `_nameText` | NameText |
| `_glowEffect` | IconArea → GlowEffect |
| `_icon` | IconArea → Icon |
| `_levelText` | LevelText |
| `_descriptionText` | DescriptionText |
| `_clickArea` | ClickArea (Button) |
| `_highlightFrame` | HighlightFrame |

### 2-6. 색상 영역 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)

### 2-7. Sprite placeholder 영역

현 시점 sprite asset 부재 → 다음 fallback:
- 카드 배경 = Unity 기본 white sprite + 색상 변경 또는 9-slice null
- 원형 아이콘 = Unity 기본 `Knob` sprite 또는 `UISprite` fallback
- 동심원 빛 = sprite null → `_glowEffect.enabled = false` (SkillCardSlot.cs 영역 자동 처리)
- 아이콘 영역 자체 = `{fileID: 0}` (asset 영역 정합) → `_icon.enabled = false` 자동

### 2-8. Prefab 저장

1. Prefab 편집 모드 → Save (Ctrl+S)
2. Project 패널 영역 `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` 정합 확증

---

## 3. C 영역 — Scene `Ingame.unity` 통합

### 3-1. Scene 열기

1. Project → `Assets/Scenes/Ingame.unity` 더블클릭
2. Hierarchy 영역 기존 GameObject 카탈로그 확증 (Player·Enemies·Foreground·IngameCanvas 등)

### 3-2. `[LevelUpManager]` GameObject 추가

1. Hierarchy 영역 root level 우클릭 → Create Empty
2. 이름: `[LevelUpManager]`
3. position: 0, 0, 0

### 3-3. LevelUpManager 컴포넌트 부착

1. `[LevelUpManager]` 선택 → Inspector → Add Component
2. `LevelUpManager` 검색 → 부착
3. Inspector 영역 field 매핑:
   - `_pool`: 자식 SkillCardPool 영역 (다음 §3-4 영역)
   - `_ui`: Scene 영역 SkillSelectionCanvas 인스턴스 영역 SkillSelectionUI component (다음 §3-5 영역)

### 3-4. SkillCardPlaceholderPool 컴포넌트 부착

1. `[LevelUpManager]` 영역 자식 GameObject 생성 또는 동일 GameObject 영역 Add Component
2. `SkillCardPlaceholderPool` 검색 → 부착
3. Inspector 영역 `_allCards` (List<SkillCardPlaceholder>) 영역:
   - Element 0 → Project 영역 `A01_jineonbu.asset` drag
   - Element 1 → `A05_hagikjin.asset`
   - Element 2 → `P01_bonghwanggyeok.asset`
   - Element 3 → `P12_saengmyeongkkot.asset`
   - Element 4 → `AW01_cheonbugyeongmun.asset`

### 3-5. SkillSelectionCanvas Prefab 인스턴스 추가

1. Project → `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` Hierarchy 영역 root level drag
2. 인스턴스 이름: `SkillSelectionCanvas` (자동)
3. 인스턴스 영역 SkillSelectionUI component 영역 자동 정합 (Prefab 영역 reference 매핑 정합)

### 3-6. LevelUpManager `_ui` field reference 매핑

1. `[LevelUpManager]` 선택 → Inspector → LevelUpManager component
2. `_ui` field → Hierarchy 영역 SkillSelectionCanvas 인스턴스 → SkillSelectionUI component drag

### 3-7. Scene 저장

1. File → Save Scene (Ctrl+S)
2. Project 영역 `Ingame.unity` 영역 변경 확증

---

## 4. 검증 영역

### 4-1. Editor 영역 시각 검증

- Hierarchy 영역 `[LevelUpManager]` + SkillSelectionCanvas 정합 표시
- Inspector 영역 LevelUpManager `_pool`·`_ui` 정합 매핑 표시
- Inspector 영역 SkillCardPlaceholderPool `_allCards` 5장 표시
- Inspector 영역 SkillSelectionUI 18 field 정합 매핑 표시
- Inspector 영역 SkillCardSlot ×3 영역 8 field 각 정합 매핑 표시

### 4-2. Play 영역 검증

1. Play 버튼
2. 기존 게임플레이 정합 (Player·Enemy·Foreground 영역 회귀 X 확증)
3. 적 처치 → Console 영역 출력:
   - `[ExperienceSystem] OnEnemyKilled: +5 XP`
   - `[PlayerProgression] GainXP: 5`
4. 누적 XP 영역 LevelXPTableLoader 영역 임계 도달 시:
   - `[LevelUpManager] HandleLevelUp Lv.2`
   - 화면 영역 SkillSelectionCanvas 표시 (3 카드 노출)
   - Time.timeScale = 0 (게임 일시정지)
   - 카드 클릭 → highlight 표시
   - 확인 버튼 → SkillSelectionCanvas Hide·Time.timeScale = 1·게임 재개

### 4-3. 회귀 검증 (Phase 1 §5-1 영역 정합)

| 기존 영역 | 영향 X 확증 |
|------|------|
| Enemy 16 인스턴스 patrol | ✅ 정합 |
| Player 컨트롤 | ✅ 정합 |
| Foreground·Background·Tilemap | ✅ 정합 |
| 기존 IngameCanvas/IngameUI/IngameChoiceSkillUI | ✅ 별도 root Canvas (Sort Order 분리) |
| BT7-Dev 자동 발동 영역 (Time.timeScale 영역) | 검증 의무 (Phase 3 영역) |

---

## 5. 회귀 위험 영역

| 영역 | 등급 | 대응 |
|------|------|------|
| 신규 GameObject root level 추가 | 낮음 | 기존 fileID 영향 X |
| SkillSelectionCanvas Prefab 인스턴스 추가 | 낮음 | 신규 root Canvas |
| Time.timeScale = 0 영역 BT7-Dev 자동 발동 | 중 | Phase 3 영역 검증 |
| Player.prefab 영역 PlayerProgression 명시 부착 | X | 자동 부착 영역 (PlayerController.Awake cs:95-97) — 변경 불필요 |
| EnemyDeath ExperienceSystem hook | X | Phase 2-A 영역 정착 |
| Scene `Ingame.unity` 영역 320,819 라인 영역 | 낮음 | 신규 추가만·기존 변경 X |

---

## 6. 후속 영역

### 6-1. PD 직접 작업 완료 후

1. Unity Editor 영역 Scene 저장 (`Ingame.unity`)
2. Prefab 저장 (`SkillSelectionCanvas.prefab`)
3. EerieVillage 영역 git status 확증:
   - `Assets/Prefabs/UI/SkillSelectionCanvas.prefab` (신규)
   - `Assets/Prefabs/UI/SkillSelectionCanvas.prefab.meta` (신규)
   - `Assets/Scenes/Ingame.unity` (수정)
4. PD 또는 PM 영역 commit·push (BT12-MVP-A Phase 2-B Editor 통합)

### 6-2. Phase 3 dev-team-lead 검증

- BT12-MVP-A 통합 검증 (Phase 1 + 2-A + 2-B asset + 2-B Editor 통합)
- 회귀 영역 (BT5-Dev·BT7-Dev·기존 IngameCanvas) 영역 영향 X 확증
- 60종 카드 효과 영역 (BT12-Dev 본격) 영역 진행 영역 결정

### 6-3. icon sprite asset 영역 차기

- placeholder sprite 5장 영역 (하트·검·방패·바람·달 등) 별도 영역 작업
- 5 asset 영역 icon field 영역 sprite reference 매핑

---

## 7. 관련 자료

- **Phase 1 설계서**: [BT12-MVP-A_설계_v1.md](BT12-MVP-A_설계_v1.md) §2 신규 컴포넌트·§5 UI Prefab 구조·§7 Phase 영역
- **dev-team-lead Phase 1 분석 보고서**: 본 세션 직전 호출 결과 (대화로그 영역 영구 보존)
- **EerieVillage commit `755a51c`**: BT12-MVP-A Phase 2-B asset 5 정착
- **EerieVillage commit `5b2b753`**: Phase 2-B 코드 (UI 컴포넌트 2 + LevelUpManager 통합)
- **EerieVillage commit `047661c`**: Phase 2-A 시스템 코드 + JSON 테이블

---

**본 가이드 작성 = 총괄PM**·dev-team-lead Phase 1 권고 정합·PD Editor 직접 영역 단계별 절차 영역.
