| **B** | AnimationClip 8종 정합 | **Pass** | 8 anim 모두 m_PPtrCurves Hero1 sprite 첫 프레임 guid 정합 (idle01·run01·attack01·combatidle01·jump01·hit01·resurrection01·death01 일치). LoopTime 정합 (Idle/Run/CombatIdle = 1, 나머지 5종 = 0). 신규 anim 3종 guid 충돌 0 |
| **C** | Health.cs 확장 검증 | **Pass** | 기존 API 전수 보존 (maxHearts·QuartersPerHeart·IncreaseMaxHearts·Heal·Decrement(int)·i-frame 0.6s) + 신규 4종 (Resurrect·이벤트 3종) + Animator null-safe 처리 (`if (animator != null)`) + BT12-Dev 미연관 주석 명시 |
| **D** | 신규 컴포넌트 2종 | **Pass** | HitInterruptGuard.cs StateMachineBehaviour OnStateEnter `ResetTrigger("hit")` 정합. PlayerStateTimer.cs MonoBehaviour 5초 타이머 + RequireComponent(PlayerController·Animator) + NotifyAttackFired 외부 API 정합 |
| **E** | EditMode 테스트 19건 | **Pass** | 12번 개정(Hero1Idle01Guid `78c7da0e2fc366543ae4ad5e3ceb1b94`) + 신규 6건(Player_Has_8_Motion_States·Player_Controller_Has_New_Parameters·Player_Hit_Interrupts_Protected·Player_CombatIdle_Timer_Component_Attached·Player_Death_To_Resurrection_Sequence·Health_Has_Resurrect_Method_And_Events) 모두 정합 |
| **J** | 회귀 위험 2건 점검 결과 | **Major** | 1번 controller YAML 정합 = 완전 통과. **2번 Health Animator 의존**: Enemy.controller에 `hit`·`dead`·`resurrect` Parameter 미존재 → Unity는 미존재 Parameter SetTrigger/SetBool 호출 시 logical no-op (silent ignore). 게임 동작 영향 0 (Enemy 사망 체인은 별 channel `Schedule<EnemyDeath>` AttackHitbox.cs:75). **단 Editor Console warning spam 가능성** (Unity 버전 의존) |
### Phase 4 진입 가능 여부
**조건부 통과 (Major 1건 — 후속 권고, 차단 영역 0건)**
- Critical 0건 — Phase 4 진입 차단 영역 없음
- Major 1건 — 회귀 위험 2번 영역. Enemy Animator parameter warning spam 가능성. 게임 동작 영향 0이므로 commit/push 진행 가능. PD Play 검증 시 Console warning 모니터링 권고
### 회귀 위험 2건 정밀 점검 결과
**1번 Player.controller YAML 정합** = 완전 통과
- 8 State 전수 존재 + 폐기 4 State 부재 + AnyState→Hit Transition 존재 + HitInterruptGuard MonoBehaviour 부착(guid 일치 정합) + AnyState→Hit `m_CanTransitionToSelf: 0` + Death→Resurrection→Idle 시퀀스 정합 + 모든 신규 fileID/guid 충돌 0건
**2번 Health.cs Animator 의존 — Enemy 영향**
- Enemy.prefab은 Animator + Enemy.controller 보유
- Enemy.controller Parameter = `velocityX`·`velocityY`·`hurt`·`death`·`grounded` (5종) — Player와 분리
- Enemy 사망 체인은 별 channel(`AttackHitbox.cs:75 Schedule<EnemyDeath>`)로 분리 — 영향 0
- **Major 잠재 리스크**: Editor Console에 매 데미지 1회 `Parameter 'hit' does not exist` warning 가능 (Unity 버전 의존). 게임 동작 영향 0. PD Play 검증 시 Console 모니터링 권고
### 검증 산출물
- 본 엔트리 (대화로그 추가)
- 매니페스트: `2026-05-07_131323` (target_files: 본 대화로그)
### 검증 토큰 사용량
~25K (C50 추정 20-30K 범위)
### Phase 4 후속 영역 (PM)
1. commit (개발팀장 서명 + Phase 1·2·3 산출물 + 본 검증 결과)
2. push (main)
3. PD Play 검증 인계 (검증 기대 동작 10건은 Phase 1 §14-3 영역)
4. (선택) Major 후속 — Enemy Health Animator parameter warning 차단 영역 별건 검토 (C2 근원적 해결 권고: Player 전용 Animator-aware Health 분리 또는 Enemy.controller `hit`/`dead`/`resurrect` Parameter 추가 또는 Health.cs Parameter 존재 가드)
| 5. PD 지시 SOT 갱신 | BT5-Dev 6단계 (CS0101 정정 + D 옵션) 추가 |
| 6. commit + push | (본 응답 후속) |
### 결정·근거 (C32)
#### 결정 1 — D 옵션 (백업 전수 삭제 + 명세 정정 + feedback 등록)
**근거 (C2 근본 해결)**: 백업 파일 = git 영역과 100% 중복 (`D:/EerieVillage` GitAutoSync 추적). `.cs.bak_*.cs` = Unity 컴파일 대상 → CS0101 직접 원인. C6-1 본래 = git 미추적 영역만 (xlsm·CSV·DB). 롤백 = `git checkout` 1줄.
#### 결정 2 — 헌법급 PM feedback (옵션 나열·결정 요청 폐기)
**근거**: 본 사건 PM 옵션 A/B/C 나열 → PD D 옵션 직접 명시 = PM 사고 회피 확증. PD 시간 낭비 + C36 자율 판단 영역 침해. C29·C36·C45·C47 정합. 단순 운영(파일·백업·정리·rename) = PM 즉시 처리. PD 가치 판단(게임 디자인·비즈니스)만 결정 요청.
| 기존 BoxCollider2D | Size 0.32 × 0.54 · Offset (-0.09, -0.14) — **이전 32×64 PNG 시점 영역 잔존, Hero1 1.43 단위 대비 22%** |
### 정정 (즉시 처리)
#### 1. PlayerController.cs spriteRenderer·animator 자식 fallback 추가
```csharp
spriteRenderer = GetComponent<SpriteRenderer>();
if (spriteRenderer == null) spriteRenderer = GetComponentInChildren<SpriteRenderer>();
animator = GetComponent<Animator>();
if (animator == null) animator = GetComponentInChildren<Animator>();
```
근거: 향후 Visual 자식 GameObject 영역으로 SpriteRenderer 분리 시에도 안전. 현 prefab 영역에서 영향 0 (직접 부착 시 GetComponent가 우선).
#### 2. Player.prefab BoxCollider2D 시각 정합 정정
| 필드 | 기존 | 정정 | 근거 |
|------|-----|-----|------|
| `m_Size` | (0.32, 0.54) | (0.45, 1.2) | Hero1 캐릭터 몸통 폭 30% × 높이 83% (PPU 300, 1.43 단위 sprite) |
| `m_Offset` | (-0.09, -0.14) | (0, -0.05) | sprite 중심 = 캐릭터 중심 정합 (캐릭터 발 sprite 95% 위치 → 중심 약간 아래) |
| `m_SpriteTilingProperty.oldSize/newSize` | (1.28, 1.26) | (1.43, 1.43) | Hero1 sprite 실제 크기 정합 |
### facing 동작 진단
`AnimationController.cs` Player.prefab 부착 0건 + anim에 `m_FlipX` curve 0건 → **PlayerController의 flipX 처리가 단독으로 동작해야 정합**. fallback 추가로 자식 SpriteRenderer 영역 안전망 보강. PD Play 검증 시 좌우 이동 → sprite 반전 동작 확인.
> "여전히 캐릭터가 반대방향으로 출력되고 있어. (리소스는 왼쪽을 보고 있지만 게임에서는 오른쪽이 기준이야.) 충돌 영역이 잘못된 것 같아. (캐릭터가 마치 공중에 떠있는 것처럼 스테이지 지면과 떨어져있고, 몬스터를 밟아서 공격할 수 없어)"
### PM 자인 (C5·C44)
엔트리 5에서 본 PM이 Hero1 idle01 시각 확인 시 "우측 향함"으로 판단 → 실제 = **좌측 향함**. C44 팩트 우선 위배. 시각적 판단 실패가 facing 로직·Collider Offset 결정에 직접 영향. 다음 작업부터 Hero1 sprite는 **좌측 default**로 확정.
### 정정 (즉시 처리)
#### 1. flipX 로직 반전 (PlayerController.cs line 153~159)
`facing = Vector2.right/left` 영역은 그대로 유지 (PlayerAttackTicker가 Schedule 시점 참조 — 게임 좌표계 기준).
#### 2. Player.prefab SpriteRenderer 디폴트 m_FlipX
- 기존: `m_FlipX: 0` (false) — 시작 시 좌측 default
- 정정: `m_FlipX: 1` (true) — 게임 시작 시 우측 향함 (PlayerController 디폴트 `facing = Vector2.right` 정합)
#### 3. Player.prefab BoxCollider2D Offset 양수
| 필드 | 엔트리 5 | 정정 (엔트리 6) | 근거 |
|------|---------|--------------|------|
| `m_Size` | (0.45, 1.20) | (0.45, **1.15**) | 캐릭터 vertical 영역 sprite 80% 재산정 (이전 83%) |
| `m_Offset` | (0, **-0.05**) | (0, **+0.10**) | 캐릭터 발 위치 sprite 85% (pivot center 기준 -0.50 단위). Collider 하단 = +0.10 - 0.575 = -0.475 ≈ 발 정합 (이전 -0.65 = 발보다 더 아래로 부유 원인) |
### 가설 검증 영역 (PD Play 재검증)
- flipX: 우측 이동 시 sprite 좌우 반전 → 우측 향함 시각 확인
- Collider: 캐릭터 발이 지면에 닿음 + 몬스터 위 충돌 가능 (밟기)
추가 보정 영역(있다면):
- Collider Size 재산정 (PD가 캐릭터 영역 시각 측정 후 보정 가능)
- pivot Bottom 변경 (37 sprite meta 일괄 — 별건 추후 정리 영역)
| 5 | `Health.cs` | `Resurrect()`에서 `invulnerableUntil = Time.time + resurrectInvulnerableDuration(2.0f)`. 부활 직후 i-frame 동안 측면 충돌 무시되며 위 밟기는 EnemyDeath 직접 호출이라 i-frame 무관 — 정합 |
### 자동 부착 영역 (Player.prefab 변경 0)
`PlayerController.Awake()`에서 `PlayerInvulnerabilityFlash`·`ResurrectPromptUI`를 `AddComponent` 자동 부착. Inspector 수동 작업 불요·prefab YAML 변경 0 = 회귀 영향 0.
### UI 임시 영역
`ResurrectPromptUI`는 OnGUI 임시 구현 (Canvas/uGUI prefab 신설 영역 회피). 미관·로컬라이즈는 향후 별건 정리.
## 엔트리 8. 밟기 점프 판정 강화·Bounce 1/3·낙사 위치 복귀·게임 최적화 (PD 지시 4건 일괄)
**시각**: 2026-05-07 14:49 ~
**주체**: 총괄PM (직접 처리)
**영역**: BT5-Dev #11
### PD 원문 (4건)
1. 밟기 = 점프 상태(공중)에서 적 상단 충돌 시만. 비점프 상태는 플레이어 피해
2. 밟기 후 튕김 높이 1/3
3. 화면 스크롤 시 버벅임 — 게임 최적화
4. 낙사 시 즉사 폐기 → HP 감소 + 가장 가까운 이동 가능 지역 복귀 + 1초 무적
### 처리
| # | 영역 | 변경 |
|---|------|------|
| 1 | `PlayerEnemyCollision.cs` | `stomped = !player.IsGrounded && player.velocity.y < 0 && player.Bounds.min.y >= enemy.Bounds.center.y`. 공중 + 하강 + 적 중심 위 = 3조건 충족 시 밟기. 그 외 i-frame 피격 |