# 05. PlayerTestGirl 아틀라스 적용 구현 보고

**작성일**: 2026-04-24
**집행**: 개발팀장 Agent (단일 PM 세션)
**PD 지시**: "캐릭터 리소스 교체 최종 집행" (2026-04-23~24)
**선행 맥락**: `04_BT5-Dev_2단계_구현보고.md` v0.2 (Player·Enemy Component Add 재위임) + PD `PlayerTestGirl.png` 수동 배치 (2026-04-22 23:47)

---

## 1. 결정 — B안 채택 근거

### 1.1 선택지
1. **A안**: 기존 Player.png 시리즈(Idle·Run 등 9종) 그대로 유지, 이미지 교체 없음
2. **B안 (채택)**: 기존 PlayerIdle.anim·PlayerRun.anim 의 m_PPtrCurves 만 PlayerTestGirl 상단 4프레임으로 교체 + PlayerAttack.anim 신설
3. **C안 (기각)**: PlayerIdle·PlayerRun.anim 통합 후 State Machine 재편 — 회귀 리스크 과다

### 1.2 B안 선택 근거
- 기존 Player.controller State Machine 보존 → Idle/Run/Jump/Land/Hurt/Death 전환 로직 미변경
- m_PPtrCurves 단순 교체로 회귀 범위 최소
- Attack 은 독립 State (Trigger 기반 AnyState→Attack) 신설로 기존 경로 간섭 없음
- C11(코드 구조 직관성): 다음 개발자가 읽었을 때 "Idle/Run 애니메이션이 PlayerTestGirl 로 교체됨 + Attack 추가" 로 명료

### 1.3 기각안 (P24 필수)
- **A안 기각**: PD 지시 본문 "해당 이미지로 아틀라스 구성 + 애니메이션 교체" — 명시적 교체 요구
- **C안 기각**: State Machine 재편은 범위 과다, Play 모드 검증 없이 commit 시 회귀 위험 과다

---

## 2. 집행 내역

### 2.1 Sprite Slice (재생성)
| 항목 | 값 |
|------|----|
| 파일 | `Assets/Character/Sprites/PlayerTestGirl.png.meta` |
| guid | `44ad58ba82191ca4d818108ab01d3baa` (기존 자동 import 결과 유지) |
| spriteMode | 2 (Multiple) |
| 해상도 | 1536×1024 |
| Grid | 4열 × 2행 = 8 sprite |
| 셀 크기 | 384 × 512 |
| sprite 명명 | `PlayerTestGirl_0` ~ `PlayerTestGirl_7` |
| pivot | (0.5, 0.5) center, pivot field (0, 0) → alignment 0 + rect 내부 계산 |
| pixelsPerUnit | 100 |
| textureType | Sprite (8) |
| spriteMeshType | 1 (Tight) |

**내용 매핑**:
- sprite 0~3 (1행, y=512): walk 애니메이션 프레임 1~4 (검 든 채 걷기)
- sprite 4~7 (2행, y=0): attack 애니메이션 프레임 1~4 (검 올리기→찌르기→검기→마무리)

**이전 meta 이슈 (재생성 사유)**:
- 기존 meta (Apr 23 00:36 Unity auto-import 생성) 는 9 sprite 로 auto-slice 되어 있었고 rect 좌표가 임의적 (예: x:96 y:580 width:223 height:305)
- 4x2 일괄 grid 가 아닌 내용 기반 auto-detection 결과
- PD 요구 대로 균일 grid 로 재생성 필요 → guid·internalID 는 유지 (prefab·anim 참조 안정)

### 2.2 AnimationClip 교체 (방식: 기존 파일 전면 재작성)

| 파일 | 기존 | 신규 |
|------|------|------|
| `PlayerIdle.anim` | PlayerIdle.png 38프레임 loop (3.17s) | PlayerTestGirl sprite 0~3 4프레임 loop (0.4s, 10fps) |
| `PlayerRun.anim` | PlayerRun.png 29프레임 loop (0.60s) | PlayerTestGirl sprite 0~3 4프레임 loop (0.25s, 16fps) |
| `PlayerAttack.anim` | **신규** | PlayerTestGirl sprite 4~7 4프레임 **non-loop** (0.48s, 12fps) |

**PlayerAttack.anim guid**: `c8d7e5a1f9b24e63a7f5d2c8e1b9a4f7` (기존 42개 guid 와 충돌 없음, grep 검증 완료)

**SampleRate 차등 근거**:
- Idle 10fps: 대기 모션 느긋
- Run 16fps: 이동 모션 빠름 (기존 27fps에서 감속, 4프레임 특성상 조정)
- Attack 12fps: 중간 속도, PlayerController.attackCooldown 0.5s 내 완결 (0.48s)

### 2.3 Player.controller 수정
1. **신규 파라미터**: `attack` Trigger (m_Type: 9) — 총 7개 파라미터 (기존 6개 + attack)
2. **신규 State**: `Player-Attack` (fileID 1102700000000000001)
   - m_Motion: PlayerAttack.anim (guid c8d7e5a1f9b24e63a7f5d2c8e1b9a4f7)
   - position: (624, -420, 0)
3. **신규 AnyState Transition**: fileID 1101700000000000001
   - 조건: attack Trigger → Player-Attack
   - m_HasExitTime: 0 (즉시 전환)
   - m_TransitionDuration: 0
4. **신규 Exit Transition**: fileID 1101700000000000002
   - Player-Attack → Player-Idle (기본 복귀)
   - m_ExitTime: 1 (애니메이션 끝난 후)
   - 조건: 없음 (unconditional)

### 2.4 Player.prefab
- SpriteRenderer `m_Sprite`: PlayerIdle (fileID 21300020) → PlayerTestGirl_0 (fileID 7882920275377484039, guid 44ad58ba82191ca4d818108ab01d3baa)
- 런타임에는 Animator Controller 가 덮어쓰므로 미학 기본값만 교체

### 2.5 EditMode 테스트 신규 2건
1. **`Player_Prefab_SpriteRenderer_References_PlayerTestGirl`**: Player.prefab YAML Regex 파싱으로 m_Sprite guid 가 `44ad58ba82191ca4d818108ab01d3baa` 와 일치 검증
2. **`Player_Controller_Has_Attack_Parameter_And_State`**: Player.controller YAML Regex 파싱으로 `attack` Trigger(m_Type:9) + Player-Attack State 존재 검증

**기존 8개 + 신규 2개 = 총 10개 EditMode 테스트**.

---

## 3. C6-1 백업 (5종)
백업 timestamp: **`20260424_0003`**.

| 원본 | 백업 |
|------|------|
| `Assets/Character/Sprites/PlayerTestGirl.png.meta` | `PlayerTestGirl.png.meta.bak_20260424_0003.meta` |
| `Assets/Character/Animations/PlayerIdle.anim` | `PlayerIdle.anim.bak_20260424_0003.anim` |
| `Assets/Character/Animations/PlayerRun.anim` | `PlayerRun.anim.bak_20260424_0003.anim` |
| `Assets/Character/Animations/Player.controller` | `Player.controller.bak_20260424_0003.controller` |
| `Assets/Prefabs/Player.prefab` | `Player.prefab.bak_20260424_0003.prefab` |

롤백 절차: 백업 파일명에서 `.bak_20260424_0003` 제거하여 덮어쓰기.

---

## 4. PD 수동 작업 — 최소화 (Play 검증 1회)

### 4.1 이상적 시나리오
1. Unity Editor 재실행
2. Asset import 자동 트리거 (meta·anim·controller YAML 변경 감지)
3. Play 버튼 → 캐릭터 walk/attack 애니메이션 확인

### 4.2 예상 시나리오 (안전 측)
1. Unity Editor 재실행
2. Asset import 확인 (Console에 import 오류 없는지)
3. `Window > General > Test Runner` → EditMode → **10 tests all green** 확인
4. Play 버튼 → walk 4프레임·attack 4프레임 표시 확인
5. 문제 발견 시 즉시 보고 → 개발팀 세션 재호출

### 4.3 런타임 검증 한계 (C23 진실)
- PM 세션에서 Unity Play 모드 실행 **불가**
- EditMode 테스트로 **YAML 구조 정합성**까지만 검증
- 시각적 애니메이션 재생·Trigger 발동·공격 판정은 PD Play 검증 필수

---

## 5. 이전 오류 재발 방지 체크리스트 (PM 요청)

| 체크 항목 | 이전 실패 | 금차 이행 |
|----------|----------|----------|
| **리소스 실물 Read(이미지) 시각 확인 선행** | 파일명 매칭만으로 판단 | PlayerTestGirl.png Read 후 보라머리·파란옷·검 든 캐릭터 **직접 확인** → 4x2 8 sprite 구성 현장 확인 |
| **전수 ls (head·tail 자르기 금지)** | `head -20` 으로 파일 스캔 | `ls -la "Assets/Character/Sprites/"` 전수 — PlayerTestGirl.png.meta 존재 (Apr 23 00:36) 발견 |
| **기존 meta Read 후 guid·구조 재사용** | 신규 meta 작성 시 기존 자동 import 결과 무시 | 기존 meta Read → guid `44ad58ba82191ca4d818108ab01d3baa` + internalID 8개 재활용 |
| **guid 충돌 검증** | 충돌 가능성 방치 | `grep -hoE "guid: [a-f0-9]{32}"` 로 42개 기존 guid 수집 + 신규 후보 `c8d7e5a1f9b24e63a7f5d2c8e1b9a4f7` grep 0건 확인 |
| **C6-1 백업 5종** | 3종 이하 | meta·Idle.anim·Run.anim·controller·prefab 5종 백업 |

---

## 6. 향후 후속 작업 제안

### 6.1 PD Play 검증 결과에 따른 분기
- **정상 동작**: 본 05 보고서 확정 + BT5-Dev 3단계 완결 아카이브
- **import 오류**: 개발팀 재위임 + Unity Console 로그 PD 전달
- **애니메이션 재생 이상**: m_PPtrCurves fileID·guid 재검증 (fileID 부호 포함 전달 확인)

### 6.2 기획팀 선행 작업 재합류 (기획팀 Agent 영역)
- PlayerTestGirl 애니메이션 4프레임으로 충분한지 기획팀 재미 판단 (P30)
- 8프레임·16프레임 확장 시 아틀라스 재발주 여부

### 6.3 다른 Player 애니메이션 (Jump·Land·Hurt·Death·Spawn·Victory)
- PlayerTestGirl 아틀라스에 대응 프레임 부재 → 현 시점 **기존 Player*.png 유지**
- 기획팀 캐릭터 교체 완전성 요구 시 추가 아틀라스 발주 (본 05 범위 외)

---

## 7. 참조
- 기획: `기획/04_전투_기본_스펙.md` (공격 마우스 좌, i-frame 0.6s)
- 선행: `개발/04_BT5-Dev_2단계_구현보고.md` v0.2
- feedback: `memory/org/feedback_pm_image_verification_skip.md` (본 작업 부산 신설)
- feedback: `memory/org/feedback_pm_dev_task_delegation_failure.md` (3회차 append)
