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;