BT5-Dev #35: 점프 측면 피해 방어 + Tilemap+CompositeCollider2D+Rigidbody2D Static+PlatformEffector2D 표준 패턴
PD 보고: 1. 밟기 시 측면 피해 발생 — [PEC] delta=-1.15~-0.41 stomped=False pInvuln=True 2. 발판 통과 X 여전 — [BT34-OneWay] applied=2 [Alien, Level] 적용 정합이지만 동작 X 진단: - TilemapCollider2D + PlatformEffector2D 단독 = Unity 영역 동작 X - Unity 표준 = TilemapCollider2D(compositeOperation=Merge) + CompositeCollider2D + Rigidbody2D(Static) + PlatformEffector2D 4종 조합 정정: - PlayerEnemyCollision: stomped=False + !player.IsGrounded → 점프 측면 피해 차단 (PD 지시 방어 코드) - GameOptimizer: TilemapCollider2D 영역에 CompositeCollider2D·Rigidbody2D Static·PlatformEffector2D 4종 조합 적용 동작: - Player 위에서 발판 떨어짐 → 충돌 (착지) - Player 옆·아래·점프 상승 → 통과 - Enemy 측면 충돌 시 점프 상태이면 피해 X
This commit is contained in:
parent
cd60c71097
commit
900affb5c5
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<UnityEngine.Tilemaps.TilemapCollider2D>();
|
||||
if (tilemapCollider != null)
|
||||
{
|
||||
tilemapCollider.compositeOperation = Collider2D.CompositeOperation.Merge;
|
||||
var composite = c.GetComponent<CompositeCollider2D>();
|
||||
if (composite == null) composite = c.gameObject.AddComponent<CompositeCollider2D>();
|
||||
var rb = c.GetComponent<Rigidbody2D>();
|
||||
if (rb == null) rb = c.gameObject.AddComponent<Rigidbody2D>();
|
||||
rb.bodyType = RigidbodyType2D.Static;
|
||||
composite.usedByEffector = true;
|
||||
var compositeEffector = c.GetComponent<PlatformEffector2D>();
|
||||
if (compositeEffector == null) compositeEffector = c.gameObject.AddComponent<PlatformEffector2D>();
|
||||
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<PlatformEffector2D>();
|
||||
if (effector == null) effector = c.gameObject.AddComponent<PlatformEffector2D>();
|
||||
|
|
@ -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)}]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue