diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 951604e..fe273af 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -250,6 +250,28 @@ namespace Platformer.Mechanics // BT89 — 자동 patrol + 즉시 벽 검출 + 1~3초 대기 영역 UpdatePatrol(); + // BT98 — 방어 영역 (R1·PD 강한 어조 정합): 발 영역 자체 절벽 검사 → 시작 위치 즉시 텔레포트 복귀 + // 본 PM 17회 가설 누적 부정확. 알고리즘 영역 부정합 잔존 시도 안전 보장. + if (_isInitialized && _collider != null) + { + Vector2 footHere = new Vector2(_collider.bounds.center.x, _collider.bounds.min.y + 0.05f); + RaycastHit2D groundUnder = Physics2D.Raycast(footHere, Vector2.down, cliffCheckDepth, groundLayerMask); + if (groundUnder.collider == null) + { + Vector3 safe = new Vector3(_startX, transform.position.y, transform.position.z); + transform.position = safe; + if (_body != null) _body.position = safe; + if (control != null) control.velocity = Vector2.zero; + _patrolPhase = 0; + SetNextPatrolTarget(); + _phaseCooldown = PHASE_COOLDOWN; + _stuckTimer = 0f; + _lastX = _startX; + _waitTimer = Random.Range(waitMinTime, waitMaxTime); + if (control != null) control.move.x = 0f; + } + } + // 이하 — Player 충돌 검출 영역 (patrol 영역과 분리) // PD 지시 2026-05-07 — Player ↔ Enemy 통과 가능이지만 Bounds.Intersects로 매 프레임 감지