diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 01a4d8a..a6d5b21 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -108,20 +108,18 @@ namespace Platformer.Mechanics } if (_cachedPlayer != null && _cachedPlayer.health != null && _cachedPlayer.health.IsAlive) { - // BT5-Dev #30 — 시각 영역 정합 보정: Player Collider 발(Bounds.min.y)이 시각 발보다 ~0.17 단위 위 (Offset y +0.10) - Vector3 ePos = transform.position; - Vector3 pPos = _cachedPlayer.transform.position; - float dx = Mathf.Abs(pPos.x - ePos.x); - const float PLAYER_COLLIDER_TO_VISUAL_FOOT = -0.17f; // Hero1 sprite 발 위치 보정 - float footY = _cachedPlayer.Bounds.min.y + PLAYER_COLLIDER_TO_VISUAL_FOOT; // Player 시각 발 - float headY = VisualBounds.max.y; // Enemy 시각 머리 (sprite 위 여백 ≈ 0) - float footHeadDelta = footY - headY; // 0 = 시각 발이 시각 머리 닿음 + // BT5-Dev #36 — Distance 영역 폐기 → Bounds.Intersects 표준 영역 (Unity Physics AABB 정확) + // Player 빠른 통과 시 한 프레임 catch 정합. Layer 13↔14 OFF 영역 통과 가능 영역 그대로. + bool inRange = VisualBounds.Intersects(_cachedPlayer.Bounds); - bool inRange = dx < hitRangeX && Mathf.Abs(pPos.y - ePos.y) < hitRangeY; + const float PLAYER_COLLIDER_TO_VISUAL_FOOT = -0.17f; + float footY = _cachedPlayer.Bounds.min.y + PLAYER_COLLIDER_TO_VISUAL_FOOT; + float headY = VisualBounds.max.y; + float footHeadDelta = footY - headY; if (inRange != _diagWasIntersecting) { - Debug.Log($"[EnemyDiag@{name}] inRange={inRange} footHeadDelta={footHeadDelta:F2} dx={dx:F2}"); + Debug.Log($"[EnemyDiag@{name}] inRange={inRange} footHeadDelta={footHeadDelta:F2} VB={VisualBounds.size} PB={_cachedPlayer.Bounds.size}"); _diagWasIntersecting = inRange; }