diff --git a/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs b/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs index 1983881..3457d2b 100644 --- a/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs +++ b/Assets/Scripts/Gameplay/PlayerEnemyCollision.cs @@ -48,7 +48,14 @@ namespace Platformer.Gameplay return; } - // 측면·아래 충돌 — i-frame 적용 피격 + // BT5-Dev #35 — 점프 상태(공중) 측면 충돌 시 피해 X 방어 코드 (PD 지시) + if (!player.IsGrounded) + { + Debug.Log($"[PEC] 점프 상태 측면 충돌 영역 피해 차단 (delta={dyAtCollision:F2})"); + return; + } + + // 지상 상태 측면·아래 충돌 — i-frame 적용 피격 if (player.health.IsInvulnerable) return; player.health.Decrement(); } diff --git a/Assets/Scripts/Mechanics/GameOptimizer.cs b/Assets/Scripts/Mechanics/GameOptimizer.cs index 75663b0..3d50858 100644 --- a/Assets/Scripts/Mechanics/GameOptimizer.cs +++ b/Assets/Scripts/Mechanics/GameOptimizer.cs @@ -51,10 +51,32 @@ namespace Platformer.Mechanics continue; } - // BT34 — Layer 8 변환 폐기 (Layer 0 유지) + PlatformEffector2D 영역 OneWay 적용 - // BT31 영역 잔존 Layer 8 영역 → Layer 0 복원 if (c.gameObject.layer == 8) c.gameObject.layer = 0; + // BT5-Dev #35 — TilemapCollider2D 영역 표준 패턴 (CompositeCollider2D + Rigidbody2D Static + PlatformEffector2D) + var tilemapCollider = c.GetComponent(); + if (tilemapCollider != null) + { + tilemapCollider.compositeOperation = Collider2D.CompositeOperation.Merge; + var composite = c.GetComponent(); + if (composite == null) composite = c.gameObject.AddComponent(); + var rb = c.GetComponent(); + if (rb == null) rb = c.gameObject.AddComponent(); + rb.bodyType = RigidbodyType2D.Static; + composite.usedByEffector = true; + var compositeEffector = c.GetComponent(); + if (compositeEffector == null) compositeEffector = c.gameObject.AddComponent(); + compositeEffector.useOneWay = true; + compositeEffector.surfaceArc = 180f; + compositeEffector.rotationalOffset = 0f; + compositeEffector.useSideFriction = false; + compositeEffector.useSideBounce = false; + applied++; + if (appliedNames.Count < 8) appliedNames.Add($"{c.gameObject.name}(Tilemap+Composite)"); + continue; + } + + // 일반 Collider — PlatformEffector2D 직접 적용 c.usedByEffector = true; var effector = c.GetComponent(); if (effector == null) effector = c.gameObject.AddComponent(); @@ -66,8 +88,8 @@ namespace Platformer.Mechanics applied++; if (appliedNames.Count < 8) appliedNames.Add($"{c.gameObject.name}({c.GetType().Name})"); } - Debug.Log($"[BT34-OneWay] applied={applied} excluded={excluded} total={allColliders.Length}"); - Debug.Log($"[BT34-OneWay] appliedSamples=[{string.Join(", ", appliedNames)}]"); + Debug.Log($"[BT35-OneWay] applied={applied} excluded={excluded} total={allColliders.Length}"); + Debug.Log($"[BT35-OneWay] appliedSamples=[{string.Join(", ", appliedNames)}]"); } } }