From 41c4b9e506a8f1dbd20ef7cb2052f94fb2494604 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 18:28:29 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#43:=20IsGrounded=20=EC=98=81?= =?UTF-8?q?=EC=97=AD=20=ED=8F=90=EA=B8=B0=C2=B7footHit=20=EB=8B=A8?= =?UTF-8?q?=EB=8F=85=20+=20=EC=A0=90=ED=94=84=20=EC=98=81=EC=97=AD=20OFF?= =?UTF-8?q?=20=EA=B0=95=EC=A0=9C=20(=EC=8B=9C=EC=9E=91=20=EB=96=A8?= =?UTF-8?q?=EC=96=B4=EC=A7=90=20=EC=B0=A8=EB=8B=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고: 시작 시 떨어짐 자인: - BT42 IsGrounded 조건 영역 → 게임 시작 frame 0 IsGrounded=false (KinematicObject 영역 영역 영역 PerformMovement 결과) → standingOnPlatform=false → mask OFF → 발판 영역 영역 → 떨어짐 정정: - IsGrounded 조건 폐기 - footHit 단독 판정 (Player 발 ↓ 0.1m raycast Layer 16 hit → 발판 위 영역) - 점프 영역 (jumpState=Jumping || InFlight+velocity.y>0) → standingOnPlatform=false 강제 (점프 시작 시 발판 영역 차단) 동작: - 게임 시작 → footHit 영역 (Player 발판 위 영역) → standingOnPlatform=true → mask ON → 정착 - 걷기 옆 (footHit X) → standingOnPlatform=false → mask OFF → 통과 - 점프 (Jumping/InFlight+상승) → standingOnPlatform=false 강제 → mask OFF → 통과 - 하강 후 발판 위 (footHit) → standingOnPlatform=true → 착지 --- Assets/Scripts/Mechanics/PlayerController.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Mechanics/PlayerController.cs b/Assets/Scripts/Mechanics/PlayerController.cs index 93041fa..cbfccdc 100644 --- a/Assets/Scripts/Mechanics/PlayerController.cs +++ b/Assets/Scripts/Mechanics/PlayerController.cs @@ -204,9 +204,12 @@ namespace Platformer.Mechanics { int baseMask = Physics2D.GetLayerCollisionMask(gameObject.layer); - // BT5-Dev #42 — PD 의도: 발판 위 착지(서있는) 영역만 충돌 ON, 걷기·점프·측면 영역 모두 통과 + // BT5-Dev #43 — IsGrounded 영역 폐기 (frame 0 미설정 → 떨어짐). footHit 단독 + 점프 영역 OFF 강제 + bool isJumpingThrough = jumpState == JumpState.Jumping + || (jumpState == JumpState.InFlight && velocity.y > 0.01f); + bool standingOnPlatform = false; - if (collider2d != null && IsGrounded) + if (collider2d != null && !isJumpingThrough) { Vector2 footPos = new Vector2(collider2d.bounds.center.x, collider2d.bounds.min.y + 0.02f); int jumpThroughMask = 1 << JUMP_THROUGH_LAYER;