BT5-Dev #41: PrepareToJump 즉시 mask OFF + jumpState=Jumping 영역 ascending 판정
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 영역 영역 영역 영역 영역
This commit is contained in:
parent
a6e0c0d56d
commit
b6baec20de
|
|
@ -170,6 +170,12 @@ namespace Platformer.Mechanics
|
||||||
jumpState = JumpState.Jumping;
|
jumpState = JumpState.Jumping;
|
||||||
jump = true;
|
jump = true;
|
||||||
stopJump = false;
|
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;
|
break;
|
||||||
case JumpState.Jumping:
|
case JumpState.Jumping:
|
||||||
if (!IsGrounded)
|
if (!IsGrounded)
|
||||||
|
|
@ -197,7 +203,8 @@ namespace Platformer.Mechanics
|
||||||
void UpdateContactFilterForDropThrough()
|
void UpdateContactFilterForDropThrough()
|
||||||
{
|
{
|
||||||
int baseMask = Physics2D.GetLayerCollisionMask(gameObject.layer);
|
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;
|
int mask = ascending ? (baseMask & ~(1 << JUMP_THROUGH_LAYER)) : baseMask;
|
||||||
contactFilter.SetLayerMask(mask);
|
contactFilter.SetLayerMask(mask);
|
||||||
contactFilter.useLayerMask = true;
|
contactFilter.useLayerMask = true;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue