BT5-Dev #42: 걷기·측면도 통과 (Player 발 raycast로 standingOnPlatform 판정)
PD 보고: 점프 통과 동작 + 추가 의도 — '바닥에 깔린 상태가 아니라 걸쳐져서 지나가는 상황' 해석: - 발판 위 착지(서있는) = 발판 영역 영역 X (정합) - 그 외 (걷기·옆에서 닿음·점프·하강) = 통과 정정: - UpdateContactFilterForDropThrough: Player 발 ↓ raycast(0.1m, Layer 16 mask) hit + IsGrounded → standingOnPlatform=true - standingOnPlatform=true → Layer 16 mask 영역 ON (발판 영역 영역 X = 영역 영역 영역) - 그 외 → Layer 16 mask OFF (걷기·점프·측면 모두 영역) PrepareToJump 즉시 mask OFF (BT41) 영역 그대로 — 점프 시작 frame 영역 발판 영역 영역 차단 동작: - 발판 위 정착 영역 = 영역 영역 ON = 안 떨어짐 - 발판 옆 걷기 영역 = footHit X 영역 OFF = 통과 - 점프 영역 영역 = IsGrounded=false 영역 standingOnPlatform=false → Layer 16 OFF = 통과 - 점프 후 발판 위 착지 = footHit + IsGrounded → standingOnPlatform=true → 다음 프레임 영역 영역 영역
This commit is contained in:
parent
b6baec20de
commit
fc243453fe
|
|
@ -203,9 +203,19 @@ namespace Platformer.Mechanics
|
||||||
void UpdateContactFilterForDropThrough()
|
void UpdateContactFilterForDropThrough()
|
||||||
{
|
{
|
||||||
int baseMask = Physics2D.GetLayerCollisionMask(gameObject.layer);
|
int baseMask = Physics2D.GetLayerCollisionMask(gameObject.layer);
|
||||||
// BT41 — jumpState == Jumping 영역 영역 ascending true (PrepareToJump frame 직후 velocity.y 미반영 영역도 통과)
|
|
||||||
bool ascending = velocity.y > 0.01f || jumpState == JumpState.Jumping;
|
// BT5-Dev #42 — PD 의도: 발판 위 착지(서있는) 영역만 충돌 ON, 걷기·점프·측면 영역 모두 통과
|
||||||
int mask = ascending ? (baseMask & ~(1 << JUMP_THROUGH_LAYER)) : baseMask;
|
bool standingOnPlatform = false;
|
||||||
|
if (collider2d != null && IsGrounded)
|
||||||
|
{
|
||||||
|
Vector2 footPos = new Vector2(collider2d.bounds.center.x, collider2d.bounds.min.y + 0.02f);
|
||||||
|
int jumpThroughMask = 1 << JUMP_THROUGH_LAYER;
|
||||||
|
RaycastHit2D footHit = Physics2D.Raycast(footPos, Vector2.down, 0.1f, jumpThroughMask);
|
||||||
|
standingOnPlatform = footHit.collider != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// standingOnPlatform=true → Layer 16 ON (착지·서있는 영역 영역 X) / 그 외 → Layer 16 OFF (통과)
|
||||||
|
int mask = standingOnPlatform ? baseMask : (baseMask & ~(1 << JUMP_THROUGH_LAYER));
|
||||||
contactFilter.SetLayerMask(mask);
|
contactFilter.SetLayerMask(mask);
|
||||||
contactFilter.useLayerMask = true;
|
contactFilter.useLayerMask = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue