From 2b345d929ced8030a3fba90d8a35b557fcb2fda4 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 18:04:08 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#37:=20=EC=A0=90=ED=94=84+Player=20?= =?UTF-8?q?=EC=9C=84(transform.y)=20=EB=8B=A8=EC=88=9C=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20(PD=20=EC=9D=98=EB=8F=84=20=EC=A0=95=ED=99=95=20?= =?UTF-8?q?=E2=80=94=20'=EC=A0=90=ED=94=84=20=ED=9B=84=20=EB=B0=9F?= =?UTF-8?q?=EC=9D=84=20=EB=95=8C=20=ED=86=B5=EA=B3=BC'=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고: '점프 후 밟을 때 통과된다는 의미였어' 진단: - footHeadDelta 좁은 영역(-0.3~0.05) → 빠른 떨어짐 한 프레임 안 miss → stomped=False - !IsGrounded(점프 상태) 측면 차단 → Player 그냥 통과 → 밟기 발동 X 정정 (단순 조건 — footHeadDelta 정확 영역 폐기): - inAir(!IsGrounded) && playerAbove(player.y > enemy.y) → 무조건 밟기 - inAir + 옆·아래 → 피해 차단 - 지상 → 피해(i-frame) Player.y > Enemy.y 단순 조건 = 점프 후 떨어지는 어떤 시점에도 catch 가능 --- Assets/Scripts/Gameplay/PlayerEnemyCollision.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs b/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs index 3457d2b..8a41556 100644 --- a/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs +++ b/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs @@ -36,22 +36,24 @@ namespace Platformer.Gameplay { if (player == null || player.health == null || enemy == null) return; - // BT5-Dev #25 — Player 발이 Enemy 머리 영역 영역 영역 영역 발동 (footHeadDelta 영역 영역 영역 영역) - bool stomped = dyAtCollision > STOMP_DELTA_MIN && dyAtCollision < STOMP_DELTA_MAX; + // BT5-Dev #37 — PD 의도 정확 반영: 점프 상태(공중) + Player.y > Enemy.y = 무조건 밟기 + // footHeadDelta 좁은 영역(-0.3~0.05) 빠른 떨어짐 한 프레임 miss → 점프+위 단순 조건으로 catch 보장 + bool inAir = !player.IsGrounded; + bool playerAbove = player.transform.position.y > enemy.transform.position.y; - Debug.Log($"[PEC] stomped={stomped} delta={dyAtCollision:F2} (range {STOMP_DELTA_MIN}~{STOMP_DELTA_MAX}) pInvuln={player.health.IsInvulnerable}"); + Debug.Log($"[PEC] inAir={inAir} above={playerAbove} delta={dyAtCollision:F2} pY={player.transform.position.y:F2} eY={enemy.transform.position.y:F2}"); - if (stomped) + if (inAir && playerAbove) { + // 점프 + Enemy 위 = 밟기 (Bounce + EnemyDeath) Schedule().enemy = enemy; player.Bounce(player.jumpTakeOffSpeed / 3f); return; } - // BT5-Dev #35 — 점프 상태(공중) 측면 충돌 시 피해 X 방어 코드 (PD 지시) - if (!player.IsGrounded) + if (inAir) { - Debug.Log($"[PEC] 점프 상태 측면 충돌 영역 피해 차단 (delta={dyAtCollision:F2})"); + // 점프 + Enemy 옆·아래 = 피해 차단 (방어 코드) return; }