From 7de70256485a4ef23dc45a4d1d61ac25968f65b4 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 18:02:19 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#36:=20=EC=B6=A9=EB=8F=8C=20=EA=B0=90?= =?UTF-8?q?=EC=A7=80=20=EC=98=81=EC=97=AD=20Distance=20=E2=86=92=20Bounds.?= =?UTF-8?q?Intersects=20=ED=91=9C=EC=A4=80=20(PD=20=EC=A0=9C=EC=95=88=20?= =?UTF-8?q?=EC=B1=84=ED=83=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고: 몬스터와 충돌 체크 X 통과 발생 — '충돌 로직 바꿔야' 자인: - Distance 기반(hitRangeX=0.7, hitRangeY=1.0) = 빠른 통과 시 한 프레임 안 진입·이탈 = miss - 표준 = Unity Physics Bounds.Intersects (AABB 정확) 정정: - VisualBounds.Intersects(player.Bounds) — Enemy SpriteRenderer 영역 + Player Collider 영역 AABB 교차 - Layer 13↔14 OFF 영역 통과 가능 영역 그대로 (충돌 영역 무관) - 시각 영역 보정(PLAYER_COLLIDER_TO_VISUAL_FOOT -0.17) 영역 그대로 - 빠른 통과 영역도 매 프레임 Bounds 교차 1회는 catch 정합 동작: - Player가 Enemy 영역 통과 시 → Bounds 교차 시점 Schedule - 점프 상태(공중) 측면 → 피해 차단(BT35) - 점프 후 머리 영역 → 밟기 --- Assets/Scripts/Mechanics/EnemyController.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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; }