fix(BT12-Dev): MeasureSafeWalkDistance 폐기·patrolMaxRange 사용

PD: "발판 가장자리까지 이동 후 멈춰있음"

근본:
- MeasureSafeWalkDistance가 Level Tilemap·AutoForeground Tilemap 의존
- Level 비활성·AutoForeground 부재 → groundTilemaps.Count=0 → return 0
- _maxRightRange=0·_maxLeftRange=0
- SetNextPatrolTarget: _targetX = _startX + Min(range, 0) = _startX
- Enemy spawn 위치 = patrol target → 즉시 arrive → wait → phase 반복 → 영구 정지

fix:
- Start 영역에서 MeasureSafeWalkDistance 호출 폐기
- _maxRightRange = _maxLeftRange = patrolMaxRange (10)
- SetNextPatrolTarget: _targetX = _startX ± Min(range, 10) → 정상 patrol
- 실제 절벽 회피는 매 frame cliffCheck Raycast (직전 a4bf508 Enemy 영역 상대)

회귀 영역 X:
- IsGrounded 가드·cliffCheck 양측 검사·KinematicObject·2D AABB Player 피격 영역 영역 X
- MeasureSafeWalkDistance 메서드는 코드 잔존 (다른 호출 없음·후속 정리)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-05-12 17:03:49 +09:00
parent a4bf5086de
commit f13132ca9c
1 changed files with 4 additions and 8 deletions

View File

@ -113,18 +113,14 @@ namespace Platformer.Mechanics
_isInitialized = false;
}
// BT97 — Start 시점 안전 거리 측정 (AutoForeground Tile data 활성 후·AfterSceneLoad 이후)
// BT104 — 시작 위치 발판 검증·자동 재배치 (PD가 PD Foreground·빈 영역 배치 시 가까운 발판 영역으로 이동)
void Start()
{
// BT109 — Raycast 영역 폐기 (BT104 영역 부정확). Tilemap cell 기반 시작 위치 발판 검증.
_startY = transform.position.y;
_maxRightRange = MeasureSafeWalkDistance(1f);
_maxLeftRange = MeasureSafeWalkDistance(-1f);
#if UNITY_EDITOR && ENEMY_DIAG_VERBOSE
Debug.Log($"[Enemy@{name}] startX={_startX:F2} startY={_startY:F2} maxR={_maxRightRange:F2} maxL={_maxLeftRange:F2}");
#endif
// BT12-Dev 2026-05-12 — MeasureSafeWalkDistance Tilemap 의존 폐기 (PD: Level 비활성·발판 가장자리 영역 멈춤).
// patrol 범위는 patrolMaxRange 사용·실제 절벽 회피는 매 frame cliffCheck Raycast가 담당.
_maxRightRange = patrolMaxRange;
_maxLeftRange = patrolMaxRange;
SetNextPatrolTarget();
_isInitialized = true;
}