[Unity] Unityにおける衝突判定まとめ

  • 61
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Unityは衝突判定を自動的に行ってくれるので、開発者はわざわざ衝突判定のコードを書く必要がありません。
しかし衝突判定でも、物理演算や衝突検出が関わってくると設定で混乱するので、ここで一度簡単にまとめてみることにしました。

~colliderコンポーネント

衝突判定の形状を示すコンポーネントです。
Materialを設定することで、反発定数などの衝突時の反発の仕方を指定することができます。

Is Trigger

チェックがついていると他の物体と衝突した時にOncollison~またはOnTigger~系の関数が呼び出されます。
また、衝突時に発生する反発効果がなくなります

Rigidbodyコンポーネント

物体に剛体の性質を持たせるコンポーネントです。

Is Gravity

チェックをつけると重力の効果が加わります。

Is Kinematic

チェックをつけると、物理演算が無効になります。
物体を移動させるためにはtransform.translateを、回転させるためにはtransform.rotateを使う必要があります。
チェックがない場合は物体に対する力を与えるすることで、物体が移動するようになります。
移動の力を加える場合はrigidbody.addforce、回転力を加える場合はrigidbody.addtorqueを使います。

設定例

以上の性質をもとに、ゲーム中のオブジェクトに対する設定例をまとめてみます。

オブジェクトの種類 オブジェクト例 collider rigidbody
位置固定 壁、障害物 Is Triggerにチェックを入れる。物質に応じたPhysics Materialを設定。 Is Kinematicsにチェックを入れる。Is Gravityにチェックを入れない
物理演算に基づいて移動 プレイヤー、敵 Is Triggerにチェックを入れない。物質に応じたPhysics Materialを設定。OnCollisionEnterに衝突時の処理を書く。 Is Kinematicsにチェックを入れない。Is Gravityは任意。
衝突時に互いの動作に影響を与えない チェックポイント、アイテム Is Triggerにチェックを入れるPhysics Materialは設定しないOnTriggerEnterに衝突時の処理を書く。 Is Kinematicsにチェックを入れる。Is Gravityにチェックを入れない
物理演算を無視して移動 アニメキャラの服装 Is Triggerにチェックを入れるPhysics Materialは設定しないOnTriggerEnterに衝突時の処理を書く。 Is Kinematicsにチェックを入れる。Is Gravityにチェックを入れない