265 lines
10 KiB
Markdown
265 lines
10 KiB
Markdown
|
|
# 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 직접 영역 단계별 절차 영역.
|