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;
|
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;
|
if (player.health.IsInvulnerable) return;
|
||||||
player.health.Decrement();
|
player.health.Decrement();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,32 @@ namespace Platformer.Mechanics
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// BT34 — Layer 8 변환 폐기 (Layer 0 유지) + PlatformEffector2D 영역 OneWay 적용
|
|
||||||
// BT31 영역 잔존 Layer 8 영역 → Layer 0 복원
|
|
||||||
if (c.gameObject.layer == 8) c.gameObject.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;
|
c.usedByEffector = true;
|
||||||
var effector = c.GetComponent<PlatformEffector2D>();
|
var effector = c.GetComponent<PlatformEffector2D>();
|
||||||
if (effector == null) effector = c.gameObject.AddComponent<PlatformEffector2D>();
|
if (effector == null) effector = c.gameObject.AddComponent<PlatformEffector2D>();
|
||||||
|
|
@ -66,8 +88,8 @@ namespace Platformer.Mechanics
|
||||||
applied++;
|
applied++;
|
||||||
if (appliedNames.Count < 8) appliedNames.Add($"{c.gameObject.name}({c.GetType().Name})");
|
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($"[BT35-OneWay] applied={applied} excluded={excluded} total={allColliders.Length}");
|
||||||
Debug.Log($"[BT34-OneWay] appliedSamples=[{string.Join(", ", appliedNames)}]");
|
Debug.Log($"[BT35-OneWay] appliedSamples=[{string.Join(", ", appliedNames)}]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue