From b6baec20de258373692fa2eefd66759dcb56b134 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 18:23:46 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#41:=20PrepareToJump=20=EC=A6=89?= =?UTF-8?q?=EC=8B=9C=20mask=20OFF=20+=20jumpState=3DJumping=20=EC=98=81?= =?UTF-8?q?=EC=97=AD=20ascending=20=ED=8C=90=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고: 여전히 발판 통과 X (BT40 적용 정합이지만 동작 X) 진단: - PrepareToJump frame: velocity.y = 0 (ComputeVelocity 영역 영역 영역 적용 X) → ascending=false → mask Layer 16 ON → body.Cast 발판 영역 충돌 → 영역 frame 영역 영역 - 다음 frame: velocity.y > 0 → mask OFF → 통과. 그러나 이미 영역 frame 영역 영역 영역 정정: - PrepareToJump case 영역 영역 즉시 contactFilter mask Layer 16 OFF (frame 지연 차단) - UpdateContactFilterForDropThrough: ascending = velocity.y > 0.01 || jumpState == Jumping (jumpState 영역 영역 영역 영역 영역 정합) 영역 frame 영역 PrepareToJump → Jumping 영역 영역 영역 mask 영역 OFF 유지 → body.Cast 영역 영역 영역 영역 영역 --- Assets/Scripts/Mechanics/PlayerController.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Mechanics/PlayerController.cs b/Assets/Scripts/Mechanics/PlayerController.cs index f7485e5..bbe07a5 100644 --- a/Assets/Scripts/Mechanics/PlayerController.cs +++ b/Assets/Scripts/Mechanics/PlayerController.cs @@ -170,6 +170,12 @@ namespace Platformer.Mechanics jumpState = JumpState.Jumping; jump = true; stopJump = false; + // BT41 — PrepareToJump frame 영역 즉시 contactFilter Layer 16 mask OFF (다음 ComputeVelocity 영역 velocity.y 적용 영역 영역 frame 영역 발판 영역 충돌 차단) + { + int baseMaskJump = Physics2D.GetLayerCollisionMask(gameObject.layer); + contactFilter.SetLayerMask(baseMaskJump & ~(1 << JUMP_THROUGH_LAYER)); + contactFilter.useLayerMask = true; + } break; case JumpState.Jumping: if (!IsGrounded) @@ -197,7 +203,8 @@ namespace Platformer.Mechanics void UpdateContactFilterForDropThrough() { int baseMask = Physics2D.GetLayerCollisionMask(gameObject.layer); - bool ascending = velocity.y > 0.01f; + // BT41 — jumpState == Jumping 영역 영역 ascending true (PrepareToJump frame 직후 velocity.y 미반영 영역도 통과) + bool ascending = velocity.y > 0.01f || jumpState == JumpState.Jumping; int mask = ascending ? (baseMask & ~(1 << JUMP_THROUGH_LAYER)) : baseMask; contactFilter.SetLayerMask(mask); contactFilter.useLayerMask = true;