BurningTimesAi/공유/대화로그/EerieVillage/2026-05-07.md

366 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EerieVillage 대화로그 — 2026-05-07
---
## 엔트리 1. BT5-Dev Hero1 캐릭터 교체 + 캐릭터 리소스 규칙 SOT 신설 (PD 결정 5건 A안 일괄 채택)
**시각**: 2026-05-07 12:34 ~
**주체**: 총괄PM
**영역**: BT5-Dev 개발팀 단일 영역
**유형**: PD 직접 신규 지시 수령 + 매니페스트 등록 + pm-auditor 사전 감사 + SOT 신설 + 개발팀장 Opus Phase 1 설계 위임
### 배경
PD 직접 결정 (2026-05-07): 활성 PD 지시 4건 중 BT12-Dev·BT7-Plan·BT7-Dev 보류 + BT5-Dev 우선 진행 채택. 신규 지시 2건:
> **PD 원문 1**: "기존에 지시한 layerTestGirl 은 폐기하고, EerieVillage\Assets\Character\Sprites\Hero1 경로에 있는 캐릭터 스프라이트를 사용하도록 교체해줘."
> **PD 원문 2**: 캐릭터 리소스 규칙 7종 모션 직접 명세 (`C1_<motion><frame>` 형식, attack·combatidle·idle·hit·jump·resurrection·run + 상태 전환 룰: idle⇄combatidle 5초 타이머·hit 인터럽트 보호)
본 PM 실측 결과 정합성 이슈 5건 발견 → PD에게 보고 + 결정 요청.
> **PD 원문 3 (이슈 5건 결정)**: "일괄 진행해."
= 권고안 A 일괄 채택 해석.
### PD 결정 (5건 일괄 채택)
| 이슈 | 결정 (A안) | 근거 |
|------|----------|------|
| 1. 파일명 공백 (`combat idle` ↔ `combatidle`) | A — 파일 rename | Unity asset 공백 미허용 + 파싱 안정성 |
| 2. death 자산 2종 처리 | A — 모션 8종 확장 | death + resurrection 시퀀스 정합 |
| 3. jump 1프레임 | A — 단일 프레임 정합 채택 | 자산 정합 + 간소함 |
| 4. 기존 Player*.png 9종 | A — `_archive/` 백업 + Hero1 단독 사용 | 롤백 안전망 |
| 5. Land·Spawn·Victory 모션 | A — 미사용 (jump 자세 유지·idle/resurrection 진입·미구현) | Hero1 7종으로 충분 |
### 본 PM 집행 결과 (본 응답 시점)
| 단계 | 처리 | 결과 |
|------|-----|-----|
| 1. pm-auditor 사전 감사 (C35-9) | Task 호출 | ✅ 통과 (Critical 0·Major 0·Minor 1·Improvement 2) |
| 2. C37-1 중복 감지 Grep | 캐릭터·리소스·네이밍 규칙 SOT 검색 | ✅ 중복 0건 |
| 3. 매니페스트 등록 | `2026-05-07_123431` | ✅ target_files 3건 차단 해제 |
| 4. PD 지시 SOT 갱신 | `개발팀_PD_지시_로그.md` BT5-Dev 활성 지시 5단계 추가 | ✅ |
| 5. 캐릭터 리소스 규칙 SOT 신설 | `프로젝트/EerieVillage/개발/spec/캐릭터_리소스_규칙_v1.md` | ✅ 영구 SOT |
| 6. 본 대화로그 엔트리 작성 | `공유/대화로그/EerieVillage/2026-05-07.md` | ✅ 신설 |
| 7. 개발팀장 Opus Phase 1 설계 위임 | C49 1단계 | ⏳ 본 응답 후속 단계 |
### 결정·근거·영향 (C32)
#### 결정 — PD 결정 5건 A안 일괄 채택 + C49 표준 프로세스 진행
**근거**:
- 권고 A안은 모두 자산 정합·롤백 안전·관행 정합 우선 — PD "일괄 진행" = 본 PM 권고 신뢰 표명
- C49 표준 프로세스 (팀장 Opus 설계 → 팀원 Sonnet 작업 → 팀장 Opus 검증) BT12-Dev에 이어 BT5-Dev 영역 시범 적용
- C50 토큰 추정 ~120-205K 사전 보고 완료 (PD 묵시 승인)
**영향**:
- 캐릭터 리소스 규칙 v1 = 영구 SOT (향후 캐릭터 추가 시 표준 — C2·C3... 자동 적용)
- Player.controller 전면 재설계 + Health.cs 부활 시스템 추가 = 회귀 범위 ↑ (개발팀장 Phase 1 설계 단계에서 영향 분석 의무)
- BT7-Plan VS 순수형 자동 발동(공격 버튼 제거)과 정합 영역 확인 필요 — `PlayerAttackTicker.cs` 영역 변경 없음 정합
### 산출물 (본 응답 시점)
- `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` BT5-Dev 활성 지시 갱신 (5단계 Hero1 적용 추가)
- `프로젝트/EerieVillage/개발/spec/캐릭터_리소스_규칙_v1.md` (신설 — 영구 SOT)
- `공유/대화로그/EerieVillage/2026-05-07.md` 본 엔트리 (신설)
- `.claude/manifest/active/2026-05-07_123431.md` (매니페스트)
### 다음 단계 (본 응답 후)
- 개발팀장 Opus Phase 1 설계 위임 (Task 호출) — Hero1 meta 재작성 설계·Animator State Machine 재설계·Health.cs hit 인터럽트 보호·resurrection 시스템 추가·기각안 5건 이상
### 기각안 (C32 필수)
**기각안 1** — PD 결정 5건 일부만 채택 (예: 이슈 1 A·이슈 2 B 등 혼합)
- 사유: PD "일괄 진행" 명시 = 본 PM 권고 A 신뢰 표명. 일부만 채택은 PD 의도 반영 부정합
**기각안 2** — 본 PM 직접 Phase 1·2 모두 처리 (개발팀장 위임 없이)
- 사유: C48 3자문 통과 → C49 표준 프로세스 정합. Animator State Machine 재설계 + Health.cs 부활 시스템 = 개발팀 전문 영역. PM 직접 처리 시 C49 위반
**기각안 3** — 캐릭터 리소스 규칙 SOT 작성 후순위 (개발팀장이 Phase 1 설계 시 작성)
- 사유: SOT는 PD 명세 직접 반영 영역 = PM 영역. 개발팀장 위임 시 C36 PM 자율 판단 범위 상한 위배 위험
### 관련 규칙·자산
- C5·C13·C32·C35·C36·C37·C39·C42·C44·C48·C49·C50·P19·P32·P33 정합
- 매니페스트 SOT (나) `2026-05-06` 채택 + 본 등록 = 정합
- pm-auditor 의무 호출 = C35-9 정합
- C49 표준 프로세스 = BT12-Dev 시범 후 BT5-Dev 2회차 적용
---
## 엔트리 2. BT5-Dev Hero1 Phase 2 클라이언트팀 적용 (W1~W12 일괄 집행)
**시각**: 2026-05-07 12:53 ~
**주체**: 클라이언트팀 (Sonnet — C49 2단계 적용)
**영역**: BT5-Dev Unity 클라이언트 단독 영역
**유형**: Phase 1 설계(개발팀장 Opus) 위임 수행 + W1~W12 일괄 집행
### 집행 결과 (W1~W12)
| W | 내용 | 결과 |
|---|------|------|
| W1 | combat idle01~04 PNG+meta rename → combatidle | ✅ 4건 rename + meta name 필드 갱신 |
| W2 | AnimationClip 8종 신설/재작성 | ✅ 5종 재작성 + 3종 신설 + meta 3건 신설 |
| W3 | Player.controller 전면 재작성 (8 State + 8 Param + Transition) | ✅ |
| W4 | HitInterruptGuard.cs 신설 | ✅ StateMachineBehaviour + meta |
| W5 | PlayerStateTimer.cs 신설 | ✅ MonoBehaviour + meta |
| W6 | Health.cs 확장 (Resurrect + 이벤트 3종 + Decrement hit/dead + Die dead) | ✅ |
| W7 | PlayerAttack.cs 1행 추가 (NotifyAttackFired) | ✅ |
| W8 | Player.prefab (m_Sprite Hero1 idle01 + m_Color white + PlayerStateTimer 부착 + maxHearts 직렬화) | ✅ |
| W9 | 기존 sprite 9종 → _archive/ 이동 | ✅ 9 PNG + 9 meta |
| W10 | EditMode 테스트 13→19건 (12번 개정 + 신규 6건) | ✅ |
| W11 | PlayerController 실측 — combatidle Bool/jump = PlayerStateTimer/grounded 조건으로 처리 확인 | ✅ 변경 없음 정합 |
| W12 | 최종 정합 검증 (8 State 전수 OK + 8 Param 전수 OK + 폐기 4 State 부재 OK + prefab 정합 OK) | ✅ |
### C6-1 백업
- **timestamp**: `20260507_1253`
- **백업 9종**: Player.controller·PlayerIdle.anim·PlayerRun.anim·PlayerAttack.anim·PlayerJump.anim·PlayerDeath.anim·Player.prefab·Health.cs·PlayerAttackTests.cs
- _archive/ 이동 9종 = 백업 자체 (guid 보존)
### 변경 파일 (Unity 영역 — E:/EerieVillage)
**재작성**: `Assets/Character/Animations/PlayerIdle.anim`·`PlayerRun.anim`·`PlayerAttack.anim`·`PlayerJump.anim`·`PlayerDeath.anim`·`Player.controller`
**갱신**: `Assets/Scripts/Mechanics/Health.cs`·`Assets/Scripts/Gameplay/PlayerAttack.cs`·`Assets/Prefabs/Player.prefab`·`Assets/Tests/Editor/PlayerAttackTests.cs`
**meta 갱신 (W1)**: `Assets/Character/Sprites/Hero1/C1_combatidle01~04.png.meta`
### 신설 파일
- `Assets/Character/Animations/PlayerCombatIdle.anim` + .meta
- `Assets/Character/Animations/PlayerHit.anim` + .meta
- `Assets/Character/Animations/PlayerResurrection.anim` + .meta
- `Assets/Scripts/Mechanics/HitInterruptGuard.cs` + .meta
- `Assets/Scripts/Mechanics/PlayerStateTimer.cs` + .meta
- `Assets/Character/Sprites/_archive/` 폴더 + .meta
### Phase 1 설계 정합
- 8 State: Player-Idle·Run·Attack·Jump·Death·CombatIdle·Hit·Resurrection ✅
- 8 Parameter: velocityX·velocityY·grounded·attack·dead·hit·combatidle·resurrect ✅
- 폐기 4 State 부재: Player-Hurt·Land·Spawn·Victory ✅
- BT7-Plan 보존: PlayerAttackTicker 변경 0 · Health 기존 API 전부 보존 ✅
- BT12-Dev 미연관: ISkillRuntime 4종 주석 명시 ✅
### 매니페스트
- `plan_id`: `2026-05-07_125257`
- `target_files`: `공유/대화로그/EerieVillage/2026-05-07.md`
### C48 3자문
- Phase 3 검증 Task 호출 = 0회 (단계 분리 의무 준수)
### 회귀 위험
- `Player.controller` 전면 재작성 → Phase 3 개발팀장 YAML 정합 재검증 필요
- `Health.cs` Animator 의존 신규 추가 (`GetComponent<Animator>()`) — Enemy Health에도 동일 컴포넌트 구조이면 Enemy hit 발동 가능성 (Phase 3 영역)
### 토큰 사용량 추정
~180K (C50 사전 승인 범위 200K 이내)
---
## 엔트리 3. BT5-Dev Hero1 Phase 3 개발팀장 검증 (C49 3단계)
**시각**: 2026-05-07 13:13 ~
**주체**: 개발팀장 (Opus — C49 3단계 검증)
**영역**: Phase 2 적용분(엔트리 2) §A~§J 정합 실측 검증
**유형**: Unity 자산 직접 grep + Phase 1 설계 정합 + 회귀 위험 2건 점검 (수정 영역 0)
### §A~§J 검증 결과 등급
| § | 검증 영역 | 등급 | 핵심 결과 |
|---|---------|------|---------|
| **A** | Player.controller YAML 정합 | **Pass** | 8 State + 8 Param + AnyState→Hit + Player-Hit 부착 + Death→Resurrection→Idle Transition 모두 정합. 폐기 4 State 부재 확증. AnyState→Hit `m_CanTransitionToSelf: 0` 확증 |
| **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) 모두 정합 |
| **F** | Player.prefab 정합 | **Pass** | m_Sprite guid `78c7da0e...` = Hero1 idle01. m_Color = white. PlayerStateTimer 부착(guid `e5f6789012345678abcdef0102030405`) + combatIdleDuration: 5. maxHearts:1·maxHP:4 직렬화 |
| **G** | Hero1 폴더 + _archive | **Pass** | combat idle 4 PNG `combatidle01~04` rename 확증 (공백 제거). 기존 Player*.png 9 + meta 9 = 18 파일 `_archive/` 이동 확증. 폐기 4 anim guid (Hurt·Land·Spawn·Victory) Player.controller 참조 0건 |
| **H** | BT7-Plan/BT12-Dev 정합 | **Pass** | PlayerAttackTicker 변경 0 ([RequireComponent(PlayerController)] 보존). Health 기존 API 보존. PlayerAttack.cs:42-44 1행 NotifyAttackFired 추가만. ISkillRuntime 미연관 주석 명시 |
| **I** | C6-1 백업 9종 + _archive 9종 | **Pass** | timestamp `20260507_1253` 통일 9건 (Player.controller·5 anim·Player.prefab·Health.cs·PlayerAttackTests.cs). _archive 9 PNG + 9 meta 정합 |
| **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와 분리
- `hit`/`dead`/`resurrect` Parameter Enemy.controller에 미존재
- Health.Decrement → animator.SetTrigger("hit") 호출 시 Unity Animator는 silent ignore (예외 0)
- 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 존재 가드)
---
## 엔트리 4. CS0101 사건 + D 옵션 근본 해결 (Unity 백업 28 파일 일괄 삭제 + feedback 2종 등록)
**시각**: 2026-05-07 13:25 ~
**주체**: 총괄PM
**영역**: BT5-Dev 후속 정정 + 조직 학습 자산 영구 보존
**유형**: PD Editor 실행 시 CS0101 발견 → 본 PM A→D 옵션 분석 → PD "D 옵션 + 결정 요청 패턴 자체 폐기" 직접 지시
### 배경
Phase 3 검증 완료 + commit `13976e2` push 후 PD Unity Editor 실행:
> **PD 원문 1**: "에디터를 실행하니 아래와 같은 에러가 발생중이야. 당장 수정해. Assets\Tests\Editor\PlayerAttackTests.cs.bak_20260507_1253.cs(15,14): error CS0101..."
본 PM 즉시 4 파일 처리 (`.cs.bak_*.cs` → `.txt`) 후 잔존 14 파일 처리 옵션 A/B/C 나열 + PD 결정 요청.
> **PD 원문 2**: "백업 파일은 왜 만드는거지?"
= 백업 자체의 정당성 의문. 본 PM 답변에서 C6-1 적용 영역 오해 자인 + D 옵션(전수 삭제 + 명세 정정) 권고.
> **PD 원문 3**: "d 옵션으로 진행하고, 앞으로는 내게 이렇게 불필요한 결정을 요구하지 마. 먼저 생각하고 최적의 결과만 간결하게 보고하도록 해."
= D 옵션 채택 + **본 PM 보고 패턴 자체 헌법급 feedback** (옵션 나열·결정 요청 폐기·즉시 진행).
### PD 결정 (2건)
1. **D 옵션 진행** — 백업 전수 삭제 + Phase 1 §12 정정 + feedback 2종 등록
2. **헌법급 PM feedback** — 분석 명확 시 옵션 나열 금지·즉시 진행·간결 보고
### 본 PM 처리 결과
| 단계 | 처리 |
|------|------|
| 1. Unity bak_2026* 일괄 삭제 | 28 파일 (3 회차: 0423·0424·0507) 전수 (Count=0 검증) |
| 2. feedback 메모리 2종 등록 | `feedback_pm_excessive_decision_request.md` (헌법급) + `feedback_unity_backup_compile_pollution.md` (organizational) |
| 3. MEMORY.md 인덱스 2 라인 추가 | feedback 2종 매핑 |
| 4. Phase 1 §12 정정 | 백업 12종 → 0건 + git checkout 롤백 절차 + C6-1 적용 영역 명문화 |
| 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 가치 판단(게임 디자인·비즈니스)만 결정 요청.
### 산출물 (본 응답 시점)
- `memory/org/feedback_pm_excessive_decision_request.md` (헌법급, 신설)
- `memory/org/feedback_unity_backup_compile_pollution.md` (organizational, 신설)
- `memory/org/MEMORY.md` 인덱스 2 라인 추가
- `프로젝트/EerieVillage/개발/06_Hero1_적용_설계.md` §12 전면 재작성
- `공유/대화로그/EerieVillage/2026-05-07.md` 본 엔트리 추가
- `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` BT5-Dev 활성 지시 갱신
- `.claude/manifest/active/2026-05-07_133153.md` + `2026-05-07_133240_mem.md` (매니페스트 2건)
- Unity 영역 변경: bak_2026* 28 파일 전수 삭제 (3 회차: 0423·0424·0507)
### 기각안
- **A** 외부 디렉토리 이동 — 백업 자체 불요 영역. 위치만 옮긴 = 노이즈 잔존
- **B** 보존 — 잔존 누적 = git 중복 + Unity import 노이즈
- **C** 단순 일괄 삭제 (명세 정정·feedback 없이) — 동일 사건 재발 차단 효과 0
### 관련 규칙·자산
- C2 근본 해결 (proxy ≠ 근본)
- C6 데이터 보호 적용 영역 명확화
- C29·C36·C45·C47 (PM 자율 + 능동 추론 + 옵션 나열 폐기)
- 매니페스트 SOT (나) 정합
- 별건: `feedback_backup_filename_format_violation` (2026-04-19, 백업 포맷 영역 — 본 사건은 백업 영역 자체)
---
## 엔트리 5. Hero1 facing 반전 + Collider2D 시각 정합 (PM 즉시 처리)
**시각**: 2026-05-07 14:17 ~
**주체**: 총괄PM (직접 처리 — feedback_pm_excessive_decision_request 첫 적용)
**영역**: BT5-Dev Unity 클라이언트 영역
**유형**: PD 지시 → 실측 → PM 즉시 정정 (옵션 나열·결정 요청 없이 진행)
### 배경
> **PD 원문**: "실제 게임에서는 캐릭터 방향을 반전시켜야 해. 물리적인 충돌 판정 영역을 캐릭터 이미지에 맞춰서 조정해줘."
### 실측
| 영역 | 결과 |
|------|------|
| `PlayerController.cs` line 153~159 | 좌우 입력 시 `spriteRenderer.flipX` + `facing` 처리 코드 존재 |
| `AnimationController.cs` line 65~68 | 동일 facing 처리 — **Player.prefab 부착 0건 = dead code** |
| `Animations/*.anim` 8종 `m_FlipX` curve | 0건 (Animator 덮어쓰기 영역 외) |
| `Hero1 idle01` 시각 | 우측 향한 한복 검사 — 갓·검·발 시각 명확 |
| Hero1 PPU | 300 (sprite 430 × 430 → 월드 1.43 × 1.43) |
| 기존 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 반전 동작 확인.
### 산출물
- `E:/EerieVillage/Assets/Scripts/Mechanics/PlayerController.cs` (Edit · 자식 fallback 2 라인)
- `E:/EerieVillage/Assets/Prefabs/Player.prefab` (Edit · BoxCollider2D Size·Offset·TilingProperty)
- `공유/대화로그/EerieVillage/2026-05-07.md` 본 엔트리 추가
- `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` BT5-Dev 7단계 추가
- `.claude/manifest/active/2026-05-07_141743_facing.md`
### feedback_pm_excessive_decision_request 첫 적용
본 작업 = 단순 운영 영역 (Unity 컴포넌트 수치 정정·코드 fallback 추가) + 분석 명확 → **옵션 A/B/C 나열·PD 결정 요청 없이 PM 즉시 처리**. C29·C36·C45·C47 정합.
### 관련 규칙·자산
- C2 근본 해결 (Hero1 영역에 정확히 맞춘 Collider — 이전 잔존 영역 정정)
- C29·C36 (PM 자율 운영 영역)
- C39-10 (실측 후 처리 — AnimationController dead code 확증·anim flipX curve 0건 확증)
- `feedback_pm_excessive_decision_request` (2026-05-07 헌법급 — 첫 적용 사례)
---