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

385 lines
21 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-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.52.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당 31 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 영역 시각 검증 후속