tanaka's Programming Memo

プログラミングについてのメモ。

Rigidbodyで、めり込んだり、跳ね返らない

Unityでは、初期設定として1を1mとして扱うことになっている。その設定のまま、5cmのオブジェクトを登場させるとサイズは0.05となる。ところがUnityのRigidbodyでは、一定以上小さい速度は省略されるようで、5cm程度のものを動かしていると、衝突しても跳ね返らないことがある。

Rigidbodyで動かすものがcm単位の場合は、値を100倍して、1=1cmとする必要がある。単位を変えた場合は、[Edit]→[Project Settings]→[Physics]を呼び出して、[Gravity]も同じ単位に合わせるのを忘れないこと。

RigidbodyのCollision Detection

かなり怪しい日本語ですが、Collision Detectionの説明の和訳。

Collision Detection

オブジェクトの動きが速すぎて、他のオブジェクトをすり抜ける場合に使う。

Discrete(個別、分離)

シーンに存在する他の全てのオブジェクトと衝突判定をしたい際に利用する。他のColliderは、そのオブジェクトと衝突したかチェックする際に、分離衝突判定(Discrete Collition Detection)を行う。これが通常の衝突判定である。

Continuous(連続)

Discrete判定のものと、リジッドボディで動き続けるオブジェクトとの衝突や、Continuous判定とリジッドボディを使っていない静止したMeshColliderとの判定に利用する。
Continuous Dynamicを設定したRigidbodyは、このRigidbodyとの衝突判定をする際に、Continuous判定を利用する。その他のRigidbodyは、Descrete判定を利用する。衝突にContinuous Dynamic判定が必要な場合に、Continuous判定を使う。(ContinuousはPhysicsのパフォーマンスに大きな影響を与える。高速移動による問題が発生していないのであれば、Discreteを設定するべきである。)

Continuous Dynamic

オブジェクトに対してcontinuous衝突判定を利用するには、ContinuousとCotinuous Dynamic衝突を利用する。
また、continuous衝突判定を、Rididbodyの設定されていない静止しているMesh Colliderと判定をする場合にも利用する。それ以外の衝突はDiscrete衝突判定を利用する。速く動作するオブジェクトに利用する。

有効なCollider

ContinuousやContinuous Dynamicモードは、Box Collider,Sphere Collider,Capsule Colliderの3種類で有効。

(メモ:Mesh Colliderには効かないらしい。Convexを設定すると効くかも??)