Unityは衝突判定を自動的に行ってくれるので、開発者はわざわざ衝突判定のコードを書く必要がありません。
しかし衝突判定でも、物理演算や衝突検出が関わってくると設定で混乱するので、ここで一度簡単にまとめてみることにしました。
~colliderコンポーネント
衝突判定の形状を示すコンポーネントです。
Materialを設定することで、反発定数などの衝突時の反発の仕方を指定することができます。
Is Trigger
チェックがついていると他の物体と衝突した時にOncollison~またはOnTigger~系の関数が呼び出されます。
また、衝突時に発生する反発効果がなくなります。
Rigidbodyコンポーネント
物体に剛体の性質を持たせるコンポーネントです。
Use Gravity
チェックをつけると重力の効果が加わります。
Is Kinematic
チェックをつけると、物理演算が無効になります。
物体を移動させるためにはtransform.translateを、回転させるためにはtransform.rotateを使う必要があります。
チェックがない場合は物体に対する力を与えるすることで、物体が移動するようになります。
移動の力を加える場合はrigidbody.addforce、回転力を加える場合はrigidbody.addtorqueを使います。
設定例
以上の性質をもとに、ゲーム中のオブジェクトに対する設定例をまとめてみます。
オブジェクトの種類 | オブジェクト例 | collider | rigidbody |
---|---|---|---|
位置固定 | 壁、障害物 | Is Triggerにチェックを入れない。物質に応じたPhysics Materialを設定。 | Is Kinematicsにチェックを入れる。Use Gravityにチェックを入れない。 |
物理演算に基づいて移動 | プレイヤー、敵 | Is Triggerにチェックを入れない。物質に応じたPhysics Materialを設定。OnCollisionEnterに衝突時の処理を書く。 | Is Kinematicsにチェックを入れない。Use Gravityは任意。 |
衝突時に互いの動作に影響を与えない | チェックポイント、アイテム | Is Triggerにチェックを入れる。Physics Materialは設定しない。OnTriggerEnterに衝突時の処理を書く。 | Is Kinematicsにチェックを入れる。Use Gravityにチェックを入れない。 |
物理演算を無視して移動 | アニメキャラの服装 | Is Triggerにチェックを入れる。Physics Materialは設定しない。OnTriggerEnterに衝突時の処理を書く。 | Is Kinematicsにチェックを入れる。Use Gravityにチェックを入れない。 |