diff --git a/Assets/Scripts/Mechanics/PlatformDropThrough.cs b/Assets/Scripts/Mechanics/PlatformDropThrough.cs index a63836f..8765b3c 100644 --- a/Assets/Scripts/Mechanics/PlatformDropThrough.cs +++ b/Assets/Scripts/Mechanics/PlatformDropThrough.cs @@ -26,19 +26,31 @@ namespace Platformer.Mechanics _self = GetComponent(); _ko = GetComponent(); _jumpThroughMask = 1 << JUMP_THROUGH_LAYER; + Debug.Log($"[BT32-DropThrough] Awake — self={(_self != null ? "OK" : "NULL")} ko={(_ko != null ? "OK" : "NULL")} mask={_jumpThroughMask}"); } void Start() { - // BT5-Dev #31 — 게임 시작 시 즉시 raycast 1회 → Player 시작 위치가 발판 위면 즉시 충돌 활성 (떨어짐 차단) + Debug.Log($"[BT32-DropThrough] Start called"); if (_self == null) return; Vector2 footPos = new Vector2(_self.bounds.center.x, _self.bounds.min.y + 0.02f); - RaycastHit2D startHit = Physics2D.Raycast(footPos, Vector2.down, footRayDistance, _jumpThroughMask); + // BT32 — 거리 무한대 = Player 시작 위치 영역 발판 영역 영역 식별 + RaycastHit2D startHit = Physics2D.Raycast(footPos, Vector2.down, Mathf.Infinity, _jumpThroughMask); if (startHit.collider != null) { Physics2D.IgnoreCollision(_self, startHit.collider, false); _activePlatform = startHit.collider; - Debug.Log($"[BT31-StartHit] Player 시작 위치 발판 영역 충돌 활성: {startHit.collider.gameObject.name}"); + Debug.Log($"[BT32-StartHit] dist={startHit.distance:F2} platform='{startHit.collider.gameObject.name}' layer={startHit.collider.gameObject.layer}"); + } + else + { + Debug.Log($"[BT32-StartHit] no Layer 8 platform below footPos={footPos} (mask={_jumpThroughMask})"); + // 마지막 수단 — 모든 Layer raycast해서 가장 가까운 영역 식별 + RaycastHit2D anyHit = Physics2D.Raycast(footPos, Vector2.down, Mathf.Infinity); + if (anyHit.collider != null) + Debug.Log($"[BT32-AnyHit] anyLayer dist={anyHit.distance:F2} platform='{anyHit.collider.gameObject.name}' layer={anyHit.collider.gameObject.layer}"); + else + Debug.Log($"[BT32-AnyHit] NOTHING below player"); } }