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

473 lines
25 KiB
Markdown
Raw Normal View History

# EerieVillage 대화로그 — 2026-05-08
---
## 엔트리 1. BT5-Dev 발판 시스템 영구 마무리 (BT63~BT75)
**시각**: 2026-05-08
**주체**: 총괄PM
**영역**: BT5-Dev Phase 3 파일럿 (개발) — 발판 시스템 + 플레이어 조작
**유형**: PD 시각 검증 반복 + 본 PM 누적 가설 부정확 자인 후 PD 명시 영역 회귀 + 영구 채택
### 배경
BT5-Dev 발판 시스템 영역 (BT47~BT74)은 PD 시각 검증 반복 + 본 PM 가설 17회 누적 부정확 자인 후 R2 (AutoForeground 분리) 채택으로 PD 의도 정합 영역 도달. 본 엔트리는 BT75 영구 마무리 commit으로 시행착오 주석 정리 + dead code 제거 + PD 명시 채택 영역 결과 보고.
### 영구 채택 영역
#### 1. GameOptimizer.cs — Foreground 분리 + 자동 분류
| 단계 | 동작 |
|------|------|
| Init | Layer Matrix Player(13) ↔ Enemy(14) 충돌 OFF |
| SetupJumpThroughPlatforms | Level Tilemap = Layer 0 (지면·벽 영구 충돌) / 그 외 비-trigger Collider2D = Layer 16 |
| PD Foreground | TilemapCollider2D `Object.Destroy` → 가림막 시각만 (PD 직접 그린 영역) |
| AutoForeground (Grid 자식·신규) | Tilemap + TilemapRenderer + TilemapCollider2D + Layer 16 자동 부착 + transform.localPosition 동기화 |
| 자동 분류 | Level → AutoForeground SetTile + Sprite 강제 |
| 제외 조건 | colliderType=None (tree·plant·fence·house) / 이름 prefix `TileGround` (지면·벽) |
| 분류 조건 | `worldY ≥ playerY+1.5` 또는 작은 공중 발판 (가로≤8 + 위·아래 빈) |
#### 2. PlayerController.cs — Drop-Through 패턴 + 입력 처리
| 영역 | 동작 |
|------|------|
| `JUMP_THROUGH_LAYER = 16` | AutoForeground·Foreground 통과 대상 Layer |
| `dropThroughTimer (0.3초)` | Down + Jump 입력 시 Layer 16 mask 강제 OFF |
| `jumpAscentTimer (0.4초)` | 점프 ascending·정점 영역 mask 강제 OFF (jitter 차단) |
| `dropThroughJump` | Drop-Through 점프 시 `velocity.y = -0.5f` (즉시 낙하·IsGrounded=false 확보) |
| `UpdateContactFilterForDropThrough` | ascending·정점·Timer 활성 시 mask OFF / footHit 3점 Raycast (좌·중·우) standingOnPlatform 안정 검출 |
| 밀림 강제 Drop-Through | 점프·낙하 중 `velocity.y > -1.5` + 수평 입력 + 발판 가장자리 일시 검출 → `dropThroughTimer` 강제 활성 |
| Down + Jump 발동 조건 | 발판(Layer 16) 위 footHit 검출 시만 (지면 위 = 일반 점프) |
#### 3. KinematicObject.cs — 공중 hit X·Y 분리
| 영역 | 동작 |
|------|------|
| 공중 hit (`!IsGrounded`) | X 이동 hit (앞 벽) = `velocity.x = 0`만 (점프 속도 보존) / Y 이동 hit (천장) = `velocity.x` + `velocity.y = Mathf.Min(velocity.y, 0)` |
### 플레이어 조작 시스템 동작 카탈로그
| 입력 | 위치 | 결과 |
|------|------|------|
| Jump only | 어디서든 | 일반 점프 (위로) |
| Jump + 수평 이동 | 발판 옆 | 정점 영역 mask 강제 OFF → 깔끔 통과 (jitter 차단) |
| Jump + 전진 (앞 벽) | 지면 | velocity.x=0 + velocity.y 보존 → 위로만 점프 |
| Down + Jump | 발판 위 | Drop-Through (발판 통과 + 점프 모션 + 자연 낙하) |
| Down + Jump | 지면 위 | 일반 점프 (위로) |
| 점프 ascending | 발판 영역 | mask OFF → 통과 |
| 점프 descending | 발판 위 | footHit 3점 검출 → standingOnPlatform=true → 착지 |
### Tile asset 분류 카탈로그 (PD 명시 정합)
| 분류 | Tile asset | 동작 |
|------|-----------|------|
| 공중 발판 (자동 분류·Drop-Through) | TileFloatingLeftEdge·RightEdge·TileMiddle | Layer 16 + Sprite Collider |
| 배경·건물 (자동 분류·Drop-Through) | ShortBuilding·TallBuilding·MidgroundFiller·cloud·hillside·midground·mountains | Layer 16 + Sprite Collider |
| 지면·벽 (Level 잔존·영구 충돌) | TileGround·TileGroundDark·TileGroundTop | Layer 0 + Tile asset Grid Collider |
| 배경 (None Tile·자체 통과) | tree·plant·fence·house | Layer 0 + Tile asset None Collider |
### 시행착오 영역 (정리·git history 영구 보존)
BT49~BT65 영역 누적 변경 17회 = 본 PM 가설 부정확 + PD 시각 검증 반복. R2 (BT66) 채택 후 영구 마무리 도달. 시행착오 commit 영역 git history 그대로 보존 — 본 BT75 = 시행착오 주석·dead code 정리만.
핵심 PD 명시 흐름:
1. "Foreground = Grid → Foreground 배경 의도" (PD 정정 — 본 PM 근본 오해 자인)
2. "발판은 위에 설 수 있어야 해" (PD 의도 명시)
3. "이전 버전처럼 발판 통과·점프 가능" (BT47 정합 회귀 명시)
4. "BT48로 복귀해봐" (commit hash 직접 명시)
5. "BT63 = 기본 상태" (PD 정합 인식)
6. "R2로 진행해줘" (AutoForeground 분리 채택)
### 잔여 영역 (PD 명시 — 추후 필요 시 재요청)
- BT74 밀림 강제 Drop-Through 영역 일부 잔존 가능 (PD 시각: "바로 떨구는 것 적용 X 느낌"). PD 명시 = "넘어가고 플레이어 조작 시스템 완성".
### 산출물
- `Assets/Scripts/Mechanics/GameOptimizer.cs` (Write 전체 재작성·시행착오 주석 정리)
- `Assets/Scripts/Mechanics/PlayerController.cs` (Edit 부분 정리·Drop-Through 패턴 영구)
- `Assets/Scripts/Mechanics/KinematicObject.cs` (Edit 부분 정리·X·Y 분리 영구)
- EerieVillage commit `2ebacf6` (BT75) — 발판 시스템 영구 마무리
### 관련 규칙·자산
- **C2 근본 해결** — BT75 시행착오 영역 정리·핵심 영역 보존
- **C5·C23·C44** — 본 PM 17회 가설 부정확 누적 자인 + PD 명시 영역 직접 따름
- **C36** — PD 명시 승인 영역만 변경
- **C18** — 양 git push 정합 (EerieVillage `2ebacf6` + BurningTimes 본 commit)
- `feedback_pm_solution_proactive_proposal` — 본 PM 표준 패턴 보유 한계 자인 후 PD 직접 명시 의무
- `feedback_pm_excessive_decision_request` — 옵션 명시 + PM 권고 + PD 결정 영역
- `feedback_pm_mcp_direct_implementation` — 본 PM Editor.log·Scene yaml·git diff direct read 능동 진단
### 후속 영역
- BT5-Dev 발판 시스템 = **완료 영역**. 활성 PD 지시 로그 BT5-Dev 영역 갱신 의무.
- 잔여 영역 (BT74 밀림 일부 잔존) = PD 명시 = 추후 필요 시 재요청 영역.
- 차기 BT5-Dev 영역 = 다른 메카닉 또는 컨텐츠 영역 (PD 결정).
---
## 엔트리 2. BT5-Dev 몬스터 시스템 (BT76~BT109)
**시각**: 2026-05-08 후반
**주체**: 총괄PM
**영역**: BT5-Dev Phase 3 파일럿 (개발) — 몬스터 리소스 교체·자동 patrol·낭떠러지 차단·밟기 처치
**유형**: PD 시각 검증 반복 + 본 PM 23회 가설 누적 부정확 자인 후 PD 근본 진단 채택 영역 도달
### 영역 카탈로그
#### Phase 1 — 몬스터 리소스 교체 (BT76~BT79)
- BT76: Enemy.prefab SpriteRenderer = M001_idle01 교체
- BT77: 4개 .anim (Idle·Run·Hurt·Death) sprite reference 영역 M001 순환 매핑 (Python 자동)
- BT78: M001 sprite fileID 영역 정확 매핑 (Multiple sprite mode internalID·BT76/BT77 정정)
- BT79: Enemy flipX 영역 PlayerController 정합 (좌측 sprite 기준 우측 이동 시 flipX=true)
#### Phase 2 — 자동 patrol·절벽 검출 (BT80~BT109)
- BT80: Enemy y+0.5 + 자동 patrol (생성 위치 ±100~150 random 왕복) + 절벽 검출 (PD 3건 일괄)
- BT81~BT85: 벽 정지·낭떠러지·flipX·이동속도·미세 밀림 영역 정정 (PD 시각 검증 반복)
- BT86: 속도 2배 느림 (maxSpeed 7→3.5) + 절벽 즉시 phase 전환
- BT87: 벽 충돌 즉시 전환·순찰 거리 절반 (50~75)
- BT88: phase+2 (시작 위치 복귀 폐기·즉시 반대 방향)
- BT89~BT93: 즉시 벽 검출·1~3초 대기·KinematicObject 정합 (transform+body 동시 push)
- BT94: phase cooldown 0.5초·시작 시 안전 거리 측정
- BT95: PatrolPath path 영역 12건 제거·velocity 즉시 반대 방향 (PD 명시)
- BT96: TriggerReverse 함수 (transform+body+velocity+move 통합 처리)
- BT97: Start 시점 안전 거리 측정 (AutoForeground Tile data 활성 후)
- BT98: R1 방어 영역 (발 자체 검사·시작 위치 텔레포트 복귀)
- BT99~BT101: EnemyWall Layer 18·투명벽 자동 생성 → 폐기 (PD Foreground TilemapCollider 부착·통로 막힘)
- BT102: 투명벽 폐기·y < startY-1.0 시작 위치 텔레포트
- BT103: 정확 측정 (Capsule 발 영역·0.1m 간격·0.5m margin)
- BT104: EnemyDeath 강화 (enabled=false·death 애니메이션·1초 Destroy) + 시작 위치 발판 검증·자동 재배치
- BT105: 제자리 사망 (body.simulated=false) + margin 0.5→2.0m
- BT106: y 영역 영구 고정 (떨어짐 영구 차단) — 폐기 (BT107 공중 부유 원인)
- BT107: Tilemap cell 기반 측정 (PD 근본 진단·Raycast 영역 부정확 폐기)
- BT108: 측정 결과 Debug.Log 진단
- BT109: footPos cell 영역 정정 (bounds.min.y - 0.5f·발판 cell 정확) + BT104 Raycast 재배치 폐기
### 영구 채택 영역 (BT109 정합)
#### EnemyController.cs
- 자동 patrol 4-phase (우측 random·시작 복귀·좌측 random·시작 복귀)
- patrolMinRange/patrolMaxRange = 50/75 (Inspector)
- Tilemap cell 기반 안전 거리 측정 (Start 시점 1회·AfterSceneLoad 후)
- TriggerReverse 영역 (절벽·벽 검출 시 transform+body+velocity 통합)
- phase cooldown 1.0초 (BT94 영역)
- waitTimer 1~3초 random (arrive 시점만)
- stuckTimer 50ms (벽 정지 fallback·BT90 영역)
- BT102 텔레포트 영역 (떨어짐 검출 후 시작 위치 복귀·보조 fallback)
#### EnemyDeath.cs (Gameplay)
- _collider.enabled = false
- control.enabled = false
- enemy.enabled = false (patrol 영역 정지)
- body.simulated = false (gravity X·제자리 사망)
- animator.SetTrigger("death")
- Object.Destroy(gameObject, 1f)
#### GameOptimizer.cs
- Init: Physics2D.IgnoreLayerCollision(13, 14, true) — Player ↔ Enemy
- SetupJumpThroughPlatforms:
- 모든 비-Level Collider2D Layer 16 강제
- PD Foreground TilemapCollider Object.Destroy (시각만)
- AutoForeground 신규 (Grid 자식·Tilemap·TilemapCollider·Layer 16·transform 동기화)
- Level → AutoForeground 자동 분류 (BT47/BT48 휴리스틱·BT49 None 차단·BT63 TileGround* 차단)
- 사후 복원 영역 (BT51 None 처리)
- CliffWalls GameObject Destroy (BT102 영역 폐기 정리)
#### TagManager.asset
- Layer 18 = "EnemyWall" (BT99 영역·BT102 폐기 후도 잔존)
### 잔여 영역 (PD 명시)
PD 보고 (BT109 후): "몬스터들 중 일부(이동 가능 영역이 좁은 경우)를 제외하면 내가 원하는대로 움직이고 있어"
= **좁은 영역 Enemy 영역 잔여 부정합**. PD 결정 영역 (재요청 시 본 PM 후속).
### 본 PM 23회+ 가설 누적 부정확 자인 영역
PD 시각 검증 반복 영역에서 본 PM 측정·검출·재배치 영역 다수 가설 시도. 핵심 PD 명시 채택 시 영구 마무리 도달:
- "PatrolPath 제거" → BT95
- "투명벽 삭제" → BT102
- "절벽 체크 로직 잘못 — 근본 원인" → BT107 Tilemap cell 기반 측정 재설계
### 산출물
- `Assets/Scripts/Mechanics/EnemyController.cs` (자동 patrol·Tilemap cell 측정·death·재배치)
- `Assets/Scripts/Mechanics/AnimationController.cs` (BT79 flipX 정합)
- `Assets/Scripts/Mechanics/GameOptimizer.cs` (Init·SetupJumpThroughPlatforms·CliffWalls 정리)
- `Assets/Scripts/Gameplay/EnemyDeath.cs` (BT104/BT105 강화)
- `Assets/Prefabs/Enemy.prefab` (M001 sprite·y+0.8·maxSpeed 3.5)
- `Assets/Scenes/Ingame.unity` (Enemy 인스턴스 16건 y+0.8·path 영역 12건 제거)
- `Assets/Character/Animations/EnemyIdle/Run/Hurt/Death.anim` (M001 sprite reference)
- `ProjectSettings/TagManager.asset` (Layer 18 EnemyWall)
### 관련 규칙·자산
- C2 근본 해결 (BT107 PD 근본 진단 채택)
- C5·C23·C44 정직성 (본 PM 23회 가설 누적 자인)
- C36 PD 명시 영역만 변경
- `feedback_pm_solution_proactive_proposal` (본 PM 표준 보유 한계 자인)
- `feedback_pm_excessive_decision_request` (옵션 명시·PM 권고)
- `feedback_pm_mcp_direct_implementation` (직접 read·yaml edit·Python 자동)
### 후속 영역
- BT5-Dev 몬스터 시스템 = 거의 완료 영역 (PD 명시 "일부 제외 정합")
- 좁은 영역 Enemy 잔여 = PD 추후 재요청 시 본 PM 후속
- 차기 영역 = PD 결정 영역 (다른 몬스터 종류·컨텐츠 등)
---
## 엔트리 3. BT5-Dev #110 — 일부 몬스터 이동 X 정정 + Foreground 통과 X 추가 진단 의뢰
**시각**: 2026-05-08 후반
**주체**: 총괄PM
**영역**: BT5-Dev Phase 3 파일럿 (개발) — 게임성 개선 2건 PD 지시
**유형**: PD 시각 검증 1차 후 본 PM Editor.log·Scene yaml direct read 진단 + #2 즉시 정정 + #1 추가 정보 의뢰
### PD 직접 지시 (2026-05-08)
1. 이전 세션에서 통과 가능하게 수정했던 Foreground를 지나갈 수 없는 원인 찾아 정정
2. 일부 몬스터가 이동하지 않는 원인 찾아 정정
PD 결정: (ii) #2 즉시 정정 + #1 추가 진단 동시 진행.
### #2 진단·정정 — Editor.log 직접 read 확정
Editor.log `[Enemy@N]` 16건 영역 직접 read:
| Enemy startY | footPos.y | startTm | maxR/maxL |
|---|---|---|---|
| -3.32 | -5.36 | NULL → 다른 cell HasTile | 3.81 / 1.59 |
| -4.47 | -1.84 | NULL | **0 / 0** |
| -0.95 | -5.74 | NULL | **0 / 0** |
| -6.46 | -2.15 | NULL | **0 / 0** |
| -1.26 | -5.81 | NULL | **0 / 0** |
| 0.08 | -7.35 | NULL | **0 / 0** |
| -5.71 | -7.39 | NULL | **0 / 0** |
| -6.50 | -5.81 | NULL | **0 / 0** |
| -4.92 | -7.35 | NULL | **0 / 0** |
| 4.31 | 3.42 | NULL | **0 / 0** |
**근본 원인**: `MeasureSafeWalkDistance` (BT109) 영역 `footPos.y = bounds.min.y - 0.5f` 단일 산식이 Enemy 인스턴스마다 collider bounds·sprite bounds·transform.y 영역 변동 대응 X → footPos cell 발판 cell 영역 미정합 → `startTm = NULL``maxR/maxL = 0` → patrol 거리 0 → arrive 즉시 → 무한 정지.
**정정 (BT110)**: 다단 fallback 채택
- sprite·collider·transform 3 영역 각 후보
- 각 후보 × 다중 offset (-0.1·-0.3·-0.5·-0.7·-1.0) = 15 후보
- 첫 HasTile cell 채택
- Debug.Log 강화 (startY·colliderFoot·spriteFoot·chosenFootY)
EerieVillage commit `19e00d3` (BT110) push 완료.
### #1 진단 — 본 PM 한계 도달·PD 추가 정보 의뢰
**확증 사실**:
- Scene yaml `Foreground` GameObject 1건 단일 — components = Transform + Tilemap + TilemapRenderer (**Collider2D·TilemapCollider2D·CompositeCollider2D 모두 부재**)
- `[GameOptimizer] AutoForeground moved=88 (high=9 small=79 threshold=2.00) / Layer16 applied=1` — 정상 호출
- ProjectSettings/Physics2DSettings.asset Layer matrix = `ffffff...ff` (모든 Layer 충돌 ON 기본)
- KinematicObject `body.Cast` + ContactFilter2D struct mutation 정합
- PlayerController `UpdateContactFilterForDropThrough` 매 frame 갱신 + `JumpState.PrepareToJump` 시점 mask OFF 강제 정합
**가설 5건 누적 (직접 확증 X)**:
1. AutoForeground 발판 영역 자체 충돌 (정상이지만 PD 의도와 다름?)
2. Level 잔존 Tile (임계값 미달 + 작은 공중 발판 미해당) = Layer 0 충돌 ON
3. Drop-Through mask OFF/ON 동기 영역 frame 정합 X
4. PD가 Editor 직접 추가/이동한 Tile 영역 자동 분류 미정합
5. AutoForeground 분류 Tile이 PD 통과 의도 영역과 다름
**`feedback_pm_root_diagnosis_priority` 발동**: 본 PM 가설 5건 누적 + 직접 확증 한계 = PD 추가 정보 능동 수령 의무.
**PD 추가 정보 의뢰**:
- (a) 통과 X 발생 정확 위치 (Scene 좌표 또는 화면 영상)
- (b) 통과 X 시점 입력 (점프 위로 통과 X / 옆으로 이동 X / Drop-Through Down+Jump X)
- (c) Play 시점 Editor.log full export 또는 어떤 발판이 막는지 시각 묘사
### 산출물
- `Assets/Scripts/Mechanics/EnemyController.cs` (MeasureSafeWalkDistance 다단 fallback)
- `공유/개발팀_백업/EerieVillage/EnemyController.cs.bak_20260508_1700.cs`
- EerieVillage commit `19e00d3` (BT110) push 완료
- 매니페스트 `2026-05-08_BT5Dev110` archived
### 관련 규칙·자산
- C2 근본 해결 (footPos 단일 산식 폐기·다단 fallback)
- C5·C44 정직성 (Editor.log 직접 read 실측 + 본 PM 진단 한계 자인)
- `feedback_pm_root_diagnosis_priority` (가설 5건 누적 후 PD 추가 정보 능동 수령 — 본 세션 신설 헌법급 feedback 첫 적용)
- `feedback_pm_solution_proactive_proposal` (다단 fallback 표준 패턴 능동 검토)
- `feedback_pm_mcp_direct_implementation` (Editor.log·Scene yaml·ProjectSettings 직접 read)
### 후속 영역
- **#2 검증 대기**: PD Editor Refresh + Play → `[Enemy@N]` log 영역 chosenFootY·startTm 영역 정합 검증 → 16건 maxR/maxL 정합 도달 확증
- **#1 PD 추가 정보 수령**: (a/b/c) 1~2건 후 본 PM 진단 재개·정정 분량 결정
- **잔여 BT12-Dev / BT7-Dev / BT7-Plan**: 본 영역 처리 후 PD 결정
---
## 엔트리 4. BT5-Dev #111 좁은 발판 patrol 정정 + 코드 최적화 분석 (개발팀장 Opus·C49 Phase 1)
**시각**: 2026-05-08 후반
**주체**: 총괄PM + 개발팀장 Opus
**영역**: BT5-Dev — #1 (i) 적용 + #2 최적화 분석 (PD 직접 지시 2건)
**유형**: 본 PM 직접 정정 + 개발팀장 Opus C49 Phase 1 분석 보고
### PD 직접 지시 (2026-05-08)
1. (i)+(iii) 진행 (B 영역 좁은 발판 5건 정정)
2. 프로젝트 반응 속도 최적화 — 개발팀에 분석·정리 위임
### #1 — BT5-Dev #111 정정
**본 PM (iii) 자인**: 본 PM 직전 권고 (iii) "AutoForeground Tilemap도 좌·우 검색" = **이미 정합** (코드 영역 `groundTilemaps` = Level + AutoForeground 양 Tilemap 검색·`HasTileInAnyTilemap` 함수 정합). 본 PM 진단 시 정확한 코드 인지 결손. (i)만 실효.
**(i) 정정 (BT111)**:
```
nextSame / nextUp / nextDown 중 어느 하나라도 HasTile = 발판 연속
```
- 좌·우 same-y cell 즉시 break 영역 폐기
- 위·아래 1 cell 인접 cell 영역 검색 추가
- 계단 영역 발판 연속 + 1 cell 폭 발판 (위/아래로 연결된 영역) 정합 도달
### #2 — 개발팀장 Opus 분석 결과 (C49 Phase 1)
본 PM이 C43 "개발팀" 호칭 영역 dev-auditor (개발팀장 역할) 직접 호출. 13 파일 + 보조 8 파일 직접 Read 후 분석.
#### 진단 — 우선순위 매트릭스
| # | 영역 | 진단 | 효과 추정 | 위험 | 우선순위 |
|---|------|------|---------|------|---------|
| 1 | EnemyController.Update 매 frame Debug.Log (BT17·EnemyDiag·BT20) | `#if UNITY_EDITOR` 또는 `[Conditional]` 가드 | 16몬 × 60fps = frame당 16~32 string boxing 제거 | 낮음 | **H** |
| 7 | Legacy 5 파일 영역 (PlatformDropThrough.cs·PatrolPath.cs·PatrolPath.Mover.cs + EnemyController.path/mover) | 자동 Destroy 영역 + 미참조. 빌드 잔존 + Layer 8 영역 차기 혼란 | 인지 부담 ↓·차기 시행착오 차단 | 낮음 | **H** |
| 3 | PlayerController footHit 3 raycast → BoxCast 1회 | 발판 standing 시 frame당 3→1 raycast | 가장자리 jitter 회귀 위험 | 중 | **M** |
| 4·5·6·8·9·10·11 | UpdatePatrol Raycast·Vector struct alloc·Tilemap 전수 순회 등 | 모두 효과 미미 또는 회귀 위험 매우 큼 | 0 또는 매우 작음 | - | **L (skip)** |
#### 핵심 진단 — 반응 속도 저하 주 원인 추정
**#1 Debug.Log 영역 = 주 원인 추정** — 16마리 몬스터 시나리오 기준 frame당 string interpolation·boxing·I/O. BT5-Dev 시행착오 28+23회 누적 영역 = `Debug.Log` 잔존이 가장 합리적 추정 (C44 추정 태그·Profiler 미실측).
#### Phase 2 옵션 (PD 결정 영역)
| 옵션 | 범위 | 회귀 위험 | 분량 |
|------|------|---------|------|
| **A. 최소** | #1만 (Debug.Log 가드) | 매우 낮음 | 단일 Task 30K |
| **B. 권고** | #1 + #7 (legacy 정리) | 낮음 | 단일 Task 50K |
| **C. 적극** | #1 + #7 + #3 (BoxCast) | 중 (가장자리 jitter 영역) | Phase 분리 — Task1 50K + Task2 40K |
**개발팀장 권고 = 옵션 B**. C 옵션 #3 BoxCast = BT47~75 발판 시행착오 영역 핵심 = 회귀 시 BT5-Dev 누적 노하우 흔들 위험. Profiler 실측 입증 후 별도 Phase 권고.
#### 본 PM 권고 (옵션 B)
- 효과 추정 = 명확 (frame당 string boxing·I/O 제거)
- 회귀 위험 낮음 (Debug.Log 가드 + legacy 자동 Destroy 영역 정리)
- 분량 단일 Task 50K (C50 사전 승인 영역)
### 산출물
- `Assets/Scripts/Mechanics/EnemyController.cs` (BT111 — 위·아래 1 cell 인접 검색)
- `공유/개발팀_백업/EerieVillage/EnemyController.cs.bak_20260508_1830.cs`
- EerieVillage commit `8b54816` (BT111) push 완료
- 매니페스트 `2026-05-08_BT5Dev111` archived
### 관련 규칙·자산
- C2 근본 해결 (좌·우 same-y cell 즉시 break 폐기·위·아래 인접 cell 검색)
- C5·C44 정직성 (본 PM (iii) 자인 + 개발팀장 #1 효과 추정 명시)
- C43 호칭 — "개발팀" 직접 수령 (개발팀장 호출)
- C49 Phase 1 표준 프로세스 — 분석·설계 단일 Task
- C50 분량 — 본 분석 Task 80K + Phase 2 옵션별 분량 사전 보고
- `feedback_pm_root_diagnosis_priority` (본 PM (iii) 잘못 식별 자인)
- `feedback_pm_solution_proactive_proposal` (분석 + 권고 능동 제시)
### 후속 영역
- **#1 BT111 검증**: PD Editor Refresh + Play → 16 몬스터 patrol 정합 검증 (잔여 #12 발판 미배치 영역 제외)
- **#2 옵션 결정**: PD 결정 (A·B·C) → C49 Phase 2 별도 Task 호출 → 구현 + 검증
- **잔여 A 영역 (#12 startX=139.27, startY=-6.50)**: PD Scene 영역 시각 검증 후속
---
## 엔트리 5. BT5-Dev 최적화 B안 집행 완료 (PD 결정)
**시각**: 2026-05-08 후반
**주체**: 총괄PM (직접 처리·C49 단순 반복 카탈로그)
**영역**: BT5-Dev — #2 옵션 B 집행 (Debug.Log 가드 + Legacy 4 파일 정리)
**유형**: PD 결정 B안 직접 집행
### PD 결정 (2026-05-08)
"B 권고안대로 해."
### 집행 결과 — 12 파일 (D 8 + M 4)
#### #1 Debug.Log 가드 (`#if UNITY_EDITOR && ENEMY_DIAG_VERBOSE`) — 7건
| 파일 | 위치 | 빈도 |
|------|------|------|
| EnemyController.cs | Start `[Enemy@N]` | Start 1회 |
| EnemyController.cs | MeasureSafeWalk `[Enemy@N dir]` | Start 시점 호출만 |
| EnemyController.cs | Update `[BT17-Update@N]` | 매 60 frame |
| EnemyController.cs | Update `[BT20-Ignore@N]` | 1회만 |
| EnemyController.cs | Update `[EnemyDiag@N]` | inRange 토글 시점 (가변) |
| GameOptimizer.cs | SetupJumpThroughPlatforms `[GameOptimizer]` | AfterSceneLoad 1회 |
| PlayerEnemyCollision.cs | Resolve `[PEC]` | 충돌 시점 |
**근본 원인 추정**: 16 몬스터 × 60fps = frame당 16~32 string boxing + I/O 누적. BT5-Dev 시행착오 28+23회 누적 시점 잔존 영역.
**가드 방식**: `#if UNITY_EDITOR && ENEMY_DIAG_VERBOSE` 사용자 정의 매크로. 차기 진단 시 Player Settings → Scripting Define Symbols → `ENEMY_DIAG_VERBOSE` 추가 시점만 활성. 기본 비활성.
#### #7 Legacy 4 파일 정리
| 영역 | 동작 |
|------|------|
| `PlatformDropThrough.cs` + `.meta` | 삭제 (자동 Destroy 영역·Layer 8 옛 영역) |
| `PatrolPath.cs` + `.meta` | 삭제 (자동 patrol 도입 후 미참조) |
| `PatrolPath.Mover.cs` + `.meta` | 삭제 (PatrolPath 의존) |
| `PatrolPathEditor.cs` + `.meta` | 삭제 (CustomEditor PatrolPath 의존) |
| `EnemyController.path` field | 제거 (legacy 호환·미사용) |
| `EnemyController.mover` field | 제거 (legacy 호환·미사용) |
| `PlayerController.Awake` PlatformDropThrough Destroy | 제거 (대상 파일 삭제 후 미참조) |
#### 검증
- **미참조 grep 0건** — `PlatformDropThrough`·`PatrolPath` 영역 전수 제거 정합
- **Debug.Log 7건 모두 가드 적용** 정합
#### Scene yaml 잔존 영역 (PD 시각 후속)
Scene `Ingame.unity` 영역 PatrolPath GameObject 11건 + parent `PatrolPaths` 잔존:
- PatrolPath1 ~ PatrolPath11 + PatrolPaths
- 코드 영역 삭제 후 = **Missing Component 상태** (Editor 빨간 경고 표시 잔존·게임 실행 영향 X)
- PD 직접 Editor 영역 시각 정리 권고 (Hierarchy → PatrolPaths 우클릭 Delete)
### 집행 절차
1. 미참조 검증 (grep) ✅
2. Scene yaml PatrolPath 영역 검증 ✅ (11 GameObject + parent)
3. 매니페스트 등록 `2026-05-08_BT5DevOpt` (9 파일) ✅
4. 백업 8 파일 작성 (`*.bak_20260508_1900.cs`) ✅
5. 코드 수정 (Debug.Log 가드 + field 제거 + Awake 제거) ✅
6. `git rm` 4 파일 + .meta ✅
7. EerieVillage commit `69b1b91` push ✅
### 산출물
- **EerieVillage 영역** (commit `69b1b91`):
- 삭제: `Assets/Scripts/Mechanics/{PlatformDropThrough,PatrolPath,PatrolPath.Mover}.cs(.meta)` + `Assets/Editor/PatrolPathEditor.cs(.meta)`
- 수정: `Assets/Scripts/Mechanics/{EnemyController,PlayerController,GameOptimizer}.cs` + `Assets/Scripts/Gameplay/PlayerEnemyCollision.cs`
- **BurningTimes 영역**:
- 백업 8 파일 (`공유/개발팀_백업/EerieVillage/*.bak_20260508_1900.cs`)
- 본 엔트리
### 관련 규칙·자산
- C2 근본 해결 (시행착오 잔존 시작 영역 식별·정리)
- C5·C44 정직성 (반응 속도 저하 주 원인 추정 명시·Profiler 미실측 자인)
- C49 단순 반복 카탈로그 v1 절충 (PM 직접 처리·개발팀장 Phase 1 분석 + PM Phase 2 구현)
- C50 분량 — Phase 1 Task 80K + Phase 2 PM 직접 처리 ~30K
- `feedback_pm_solution_proactive_proposal` (개발팀장 분석 + PM 권고 능동 제시)
### 후속 영역
- **PD Editor 검증**: Asset Refresh + Play → 게임 반응 속도 개선 시각 검증 + Console 영역 진단 메시지 비활성 확증
- **Scene yaml PatrolPath 11건 정리**: PD Editor Hierarchy 영역 직접 삭제
- **잔여 A 영역 (#12)**: PD Scene 영역 시각 정리
- **차기 진단 활성**: 차기 시행착오 시점 Project Settings → Scripting Define Symbols → `ENEMY_DIAG_VERBOSE` 추가