貫通する当たり判定と対策

…Collisionが貫通した
Unityでも普通に発生しますが、対策は用意されているので紹介だけです。

Rigidbody 2DのCollision Detectionには以下の二つが用意されています。
Unityのドキュメントページは以下です。
https://docs.unity3d.com/ja/2021.3/Manual/class-Rigidbody2D.html

  • Discrete
    • 初期値
    • 処理が軽い
    • 早い物体は貫通する
    • 衝突判定も、厳密な位置ではない
  • Continuous
    • 厳密な衝突判定
    • 早い物体も貫通することはない
    • CPUの処理負荷が大きい

初期値はDiscreteです。
説明がなんとも言えない感じですが、各フレーム単位でのみ衝突判定を行うようです。
表現を変えると、「運よく重なった瞬間を撮影出来たら、衝突した事にする」と言っているような感じですね。

もう一つ、Continuousという選択肢があります。
こちらも説明がなんとも言えない感じですが、「動きを考慮し、理論上正しい衝突になるまで計算する」感じです。

ということで、Rigidbody 2DのCollision DetectionをContinuousにすることで、貫通対策が可能となります。
Collision周りの話ですが、Collisionには設定がありません。ここが直感的ではないかもしれません。

最初からContinuousではないのは、やはりCPU負荷が高いからでしょう。
全ての当たり判定をContinuousにするのは、よい選択肢ではないかもしれませんね。(特に開発用PCは高性能な事が多いので、気付くのが遅れて面倒な事態になりかねません)