…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は高性能な事が多いので、気付くのが遅れて面倒な事態になりかねません)