0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity-Rigidbody の Collision Detection モードについて

Posted at

Unity Rigidbody の Collision Detection モードについて

Unity の Rigidbody.collisionDetectionMode は、オブジェクトの衝突判定の精度を設定するプロパティです。特に、高速で移動するオブジェクトが壁をすり抜けてしまう問題を防ぐために重要です。

Collision Detection Mode の種類

collisionDetectionMode には、次の 4種類のモード があります。

モード 説明 適用例
Discrete (デフォルト) フレームごとの物理計算で衝突を判定(低負荷) ゆっくり動くオブジェクト(キャラクター、家具など)
Continuous 次のフレームまでの軌道を予測 して衝突判定(高速向け) 高速で動くプレイヤーや弾丸
ContinuousDynamic 他の Continuous オブジェクトとの衝突も考慮(最も精度が高い) 高速で動く剛体が「動く壁」に当たる場合
ContinuousSpeculative 負荷を抑えた Continuous(ただし精度は落ちる) ある程度速いが、そこまで精度が不要なオブジェクト

各モードの使い分け

1. ゆっくり動くオブジェクト

デフォルト設定で問題なし。

rb.collisionDetectionMode = CollisionDetectionMode.Discrete;

2. 高速で動くプレイヤーや弾丸

壁や障害物をすり抜けないようにする。

rb.collisionDetectionMode = CollisionDetectionMode.Continuous;

3. 高速なオブジェクト同士の衝突を考慮

動く壁に当たる可能性がある場合、より精度の高い衝突判定を行う。

rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;

4. パフォーマンスを抑えつつ Continuous を使いたい場合

負荷を抑えつつ、ある程度の高速移動をカバーする。

rb.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative;

設定の実装例

弾丸がすり抜けないようにするコード

public class Bullet : MonoBehaviour
{
    Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.collisionDetectionMode = CollisionDetectionMode.Continuous;
    }
}

注意点

  • Discrete だと、高速移動時にすり抜ける可能性がある。
  • ContinuousDynamic は処理負荷が高いため、必要なオブジェクトだけに適用するのが推奨。
  • ContinuousSpeculative は負荷は軽いが、精度が若干落ちるため慎重に選択する。

まとめ

  • デフォルト (Discrete) は低負荷だが、高速移動時のすり抜けが発生しやすい。
  • すり抜けを防ぐには ContinuousContinuousDynamic を使う。
  • パフォーマンスと精度を両立したいなら ContinuousSpeculative を試す。

適切な collisionDetectionMode を選択して、物理演算の安定性を高めましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?