Unity の Collider(コライダー) コンポーネントはオブジェクトの当たり判定の形状を定義します。このページでは、オブジェクト同士の物理衝突をスクリプトで検知する方法と、衝突せずに「触れた」ことだけを検知するトリガーの使い方を学びます。
このページを読み終えると、以下のことができるようになります。
OnCollisionEnter メソッドで物理衝突を検知できるOnTriggerEnter メソッドの違いを説明できるother.gameObject プロパティ / collision.gameObject プロパティで相手のオブジェクトを取得できるDestroy() メソッドでシーンからオブジェクトを削除できるCollider コンポーネントはゲームオブジェクトの当たり判定の形状を定義します。GameObject.CreatePrimitive() や Unity エディターで 3D オブジェクトを作成すると、形状に合った Collider(Sphere Collider、Box Collider など)が自動的に追加されます。
Rigidbody を持つオブジェクトが Collider を持つ別のオブジェクトに触れると、物理エンジンによって衝突(押し合い・反発)が発生します。
衝突判定の実験のため、まずは以下の図のようにゲームオブジェクトを配置してください。メニューバーの GameObject → 3D Object 項目から Cube と Sphere を追加し、立方体の直上に球体を配置してください。

球体ゲームオブジェクトに Rigidbody コンポーネントとスクリプトを追加して準備完了です。
Rigidbody を持つオブジェクトが別の Collider に触れたとき、OnCollisionEnter() メソッド が呼ばれます。
MonoBehaviour.OnCollisionEnter() — Collider または Rigidbody が別の Collider / Rigidbody に接触したとき呼ばれます。
書式:OnCollisionEnter メソッド
1
private void OnCollisionEnter(Collision collision);
| パラメータ | 説明 |
|---|---|
collision |
衝突情報を持つ Collision オブジェクト |
collision.gameObject プロパティで衝突した相手の GameObject を取得できます。
1
2
3
4
5
6
7
8
9
using UnityEngine;
public class Sample : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
Debug.Log($"衝突: {collision.gameObject.name}");
}
}
物理的な衝突(反発・押し合い)はそのまま継続します。OnCollisionEnter() メソッドはあくまで「ぶつかったことをスクリプトに知らせる」だけです。
衝突したゲームオブジェクトを削除するプログラムを作成しましょう。ゲームオブジェクトをスクリプトから削除するには Destroy() メソッドを使います。
Object.Destroy() — ゲームオブジェクトやコンポーネントをシーンから削除します。
書式:Object.Destroy メソッド
1
public static void Destroy(Object obj);
| パラメータ | 説明 |
|---|---|
obj |
削除する Object(GameObject やコンポーネント) |
OnCollisionEnter() メソッドの中で Destroy(collision.gameObject) を呼ぶと、衝突した相手を削除できます。
1
2
3
4
5
6
7
8
9
using UnityEngine;
public class Sample : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
Destroy(collision.gameObject);
}
}
アイテム回収のように「触れたことを検知したいが、ぶつかって弾き飛ばされたくない」場合は、Collider の Is Trigger をオンにします。

| Is Trigger | 動作 |
|---|---|
| オフ(既定) | Rigidbody と物理的に衝突する(反発・押し合い) |
| オン | 交差しても弾かれない。交差をスクリプトで検知できる |
💡 補足: Is Trigger をオンにしても Collider は消えません。「見えない交差検知ゾーン」として機能します。
Rigidbody を持つオブジェクトが、Is Trigger がオンの Collider に侵入したとき、OnTriggerEnter() メソッド が呼ばれます。
MonoBehaviour.OnTriggerEnter() — Is Trigger の Collider に別のオブジェクトが侵入したとき呼ばれます。
書式:OnTriggerEnter メソッド
1
private void OnTriggerEnter(Collider other);
| パラメータ | 説明 |
|---|---|
other |
交差した相手の Collider コンポーネント |
OnCollisionEnter() メソッドとの違いに注目してください。パラメータの型が Collision(衝突情報)ではなく Collider(コンポーネント)になっています。相手の GameObject は other.gameObject プロパティで取得します。
衝突と同じように、交差した相手を削除するスクリプトを実行してみましょう。
1
2
3
4
5
6
7
8
9
10
using UnityEngine;
public class Sample : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Debug.Log($"触れた: {other.gameObject.name}");
Destroy(other.gameObject);
}
}
OnCollisionEnter の場合は衝突が発生した後オブジェクトを削除するので、衝突した瞬間に球体が停止する「突っかかり」のようなものがありますが、OnTriggerEnter の場合は衝突が発生しないので球体の落下は妨げられていません。
OnCollisionEnter(Collision collision) メソッドは物理衝突が発生したとき呼ばれる。衝突自体はそのまま起きるOnTriggerEnter(Collider other) メソッドは Rigidbody が Is Trigger の Collider に入ったとき呼ばれるgameObject プロパティで相手の GameObject を取得できるDestroy(gameObject) メソッドでシーンからオブジェクトを削除できるOnCollisionEnter メソッドと OnTriggerEnter メソッドはどちらも「触れたとき」に呼ばれますが、何が違いますか?Destroy(gameObject) と Destroy(other.gameObject) の違いは何ですか?OnCollisionEnter メソッドは Is Trigger がオフの通常の物理衝突で呼ばれ、反発が起きる。OnTriggerEnter メソッドは Is Trigger がオンの Collider に侵入したとき呼ばれ、オブジェクトはすり抜ける。OnTriggerEnter メソッドで検知できるようになる。Destroy(gameObject) メソッドは自分自身を削除し、Destroy(other.gameObject) メソッドは触れた相手を削除する。プレハブ(Prefab) では、同じ設定のゲームオブジェクトを大量に配置するための「ひな形」の仕組みを学びます。