リンドくん先生、Unityで当たり判定を作りたいんですけど、ColliderとTriggerって何が違うんですか?
たなべこの2つの使い分けがゲーム開発では超重要なんだ。
簡単に言うと、Colliderは「ぶつかって止まる」判定で、Triggerは「すり抜ける」判定なんだよ。
リンドくんえっ、すり抜けるのに判定があるってどういうことですか?
たなべ例えば、アイテムを拾うときって、プレイヤーがアイテムにぶつかって止まったら変だよね?
すり抜けながら「触れた」ことだけを検知したいときにTriggerを使うんだ。詳しく説明していくよ!
ゲーム開発において当たり判定は、プレイヤーと敵の衝突、アイテムの取得、ゴール判定など、あらゆる場面で必要となる基本中の基本です。
Unityでは「Collider」というコンポーネントを使って当たり判定を実現しますが、その中でも通常のColliderとTriggerの違いを理解することが、思い通りのゲームを作る上でとても重要になります。
この記事では、Unity初心者の方に向けて、ColliderとTriggerの基本概念から実際のコードの書き方まで、わかりやすく解説していきます。
Colliderとは何か?物理的な当たり判定の基本
Colliderの役割
Collider(コライダー) とは、Unityのゲームオブジェクトに「当たり判定の形」を与えるコンポーネントです。
Colliderを設定することで、そのオブジェクトは他のオブジェクトと物理的に衝突できるようになります。壁にぶつかって止まる、床の上に立つ、といった挙動はすべてColliderによって実現されています。
主なColliderの種類
Unityには様々な形状のColliderが用意されています。
- Box Collider - 箱型の当たり判定。壁や床、箱などに最適
- Sphere Collider - 球型の当たり判定。ボールやキャラクターの頭部などに使用
- Capsule Collider - カプセル型の当たり判定。人型キャラクターによく使われる
- Mesh Collider - 3Dモデルの形状に沿った当たり判定。複雑な形状に対応
初心者の方は、まずBox ColliderとSphere Colliderから使い始めるのがおすすめです。
Colliderの追加方法
- ヒエラルキーでオブジェクトを選択
- インスペクターで「Add Component」をクリック
- 「Physics」→「Box Collider」などを選択
これだけで、そのオブジェクトに当たり判定が追加されます。

Triggerとは何か?すり抜ける当たり判定
Triggerの役割
Trigger(トリガー) は、Colliderの特殊なモードです。
通常のColliderが「物理的にぶつかって止まる」のに対し、Triggerはオブジェクトをすり抜けながら「触れた」ことだけを検知します。
これが非常に便利なのは、以下のような場面です。
- アイテムの取得判定(プレイヤーがアイテムに触れたら取得)
- ゴールエリアの判定(プレイヤーがゴールに入ったらクリア)
- 敵の索敵範囲(プレイヤーが範囲に入ったら追跡開始)
TriggerをONにする方法
Triggerを使うには、Colliderコンポーネントの「Is Trigger」チェックボックスをONにするだけです。
- 対象のオブジェクトを選択
- インスペクターでColliderコンポーネントを確認
- 「Is Trigger」にチェックを入れる
たったこれだけで、そのColliderはTriggerモードになります。

ColliderとTriggerの使い分け方
リンドくんなるほど!でも、実際にどう使い分ければいいんですか?
たなべポイントは「物理的に止まってほしいかどうか」で判断することだよ。
壁や床は止まってほしいからCollider、アイテムや判定エリアはすり抜けてほしいからTriggerって感じだね。
使い分けの基準
| 用途 | Collider | Trigger |
|---|---|---|
| 壁・床・障害物 | ○ | × |
| アイテム取得 | × | ○ |
| ダメージエリア | × | ○ |
| ゴール判定 | × | ○ |
| キャラクター同士の衝突 | ○ | × |
| 索敵範囲 | × | ○ |
基本的な考え方として、物理的な相互作用が必要ならCollider、検知だけが必要ならTriggerと覚えておくと良いでしょう。
注意点 Rigidbodyが必要
ColliderやTriggerの判定を正しく動作させるためには、少なくとも片方のオブジェクトにRigidbodyコンポーネントが必要です。
Rigidbodyは物理演算を行うためのコンポーネントで、これがないと衝突イベントが発生しません。動くキャラクターには基本的にRigidbodyを付けておきましょう。
サンプルコード Colliderの衝突を検知する
通常のCollider同士が衝突したときの処理を書いてみましょう。
using UnityEngine;
public class CollisionExample : MonoBehaviour
{
// 衝突した瞬間に呼ばれる
void OnCollisionEnter(Collision collision)
{
Debug.Log("衝突しました: " + collision.gameObject.name);
// 衝突した相手が「Enemy」タグなら
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("敵と衝突!ダメージを受けた!");
}
}
// 衝突している間、毎フレーム呼ばれる
void OnCollisionStay(Collision collision)
{
Debug.Log("衝突中: " + collision.gameObject.name);
}
// 衝突が終わった瞬間に呼ばれる
void OnCollisionExit(Collision collision)
{
Debug.Log("離れました: " + collision.gameObject.name);
}
}ポイント解説
OnCollisionEnter- 衝突した瞬間に1回だけ呼ばれるOnCollisionStay- 衝突している間、毎フレーム呼ばれるOnCollisionExit- 離れた瞬間に1回だけ呼ばれるcollision.gameObject- 衝突した相手のオブジェクトを取得できる
サンプルコード Triggerの接触を検知する
次に、Triggerモードでの接触検知のコードです。
using UnityEngine;
public class TriggerExample : MonoBehaviour
{
// Triggerに入った瞬間に呼ばれる
void OnTriggerEnter(Collider other)
{
Debug.Log("Trigger内に入りました: " + other.gameObject.name);
// 入ってきたのが「Player」タグなら
if (other.CompareTag("Player"))
{
Debug.Log("プレイヤーがアイテムを取得!");
// このアイテムを消す
Destroy(gameObject);
}
}
// Trigger内にいる間、毎フレーム呼ばれる
void OnTriggerStay(Collider other)
{
Debug.Log("Trigger内に滞在中: " + other.gameObject.name);
}
// Triggerから出た瞬間に呼ばれる
void OnTriggerExit(Collider other)
{
Debug.Log("Triggerから出ました: " + other.gameObject.name);
}
}ColliderとTriggerのコードの違い
| 項目 | Collider | Trigger |
|---|---|---|
| メソッド名 | OnCollision〇〇 | OnTrigger〇〇 |
| 引数の型 | Collision | Collider |
この違いを間違えると動作しないので、注意が必要です。
アイテム取得システムを作ってみよう
リンドくん実際にゲームで使えるサンプルを見てみたいです!
たなべじゃあ、よくあるアイテム取得の仕組みを作ってみようか。
プレイヤーがコインに触れたらスコアが増えて、コインが消えるっていうシンプルなものだよ。
コイン側のスクリプト
using UnityEngine;
public class Coin : MonoBehaviour
{
public int scoreValue = 100; // このコインの得点
void OnTriggerEnter(Collider other)
{
// プレイヤーが触れたら
if (other.CompareTag("Player"))
{
// スコアを加算(GameManagerがあると仮定)
GameManager.Instance.AddScore(scoreValue);
// 取得エフェクトを再生(あれば)
// Instantiate(collectEffect, transform.position, Quaternion.identity);
// コインを消す
Destroy(gameObject);
}
}
}セットアップ手順
-
コインオブジェクトの設定
- Sphere Colliderを追加
- 「Is Trigger」をONにする
- 上記のCoinスクリプトをアタッチ
-
プレイヤーオブジェクトの設定
- Collider(Capsule Colliderなど)を追加
- Rigidbodyを追加
- タグを「Player」に設定
これで、プレイヤーがコインに触れるとスコアが加算され、コインが消えるシステムの完成です。
よくあるトラブルと解決法
問題1 当たり判定が反応しない
原因と解決法
- 少なくとも片方にRigidbodyがあるか確認
- Colliderの「Is Trigger」設定が正しいか確認
- メソッド名が正しいか確認(OnCollisionとOnTriggerの違い)
- タグの設定が正しいか確認
問題2 すり抜けてしまう
原因と解決法
- 移動速度が速すぎる場合は、RigidbodyのCollision Detectionを「Continuous」に変更
- Colliderのサイズが小さすぎないか確認
問題3 判定が複数回呼ばれる
原因と解決法
- Destroyする前にフラグを立てて重複呼び出しを防ぐ
- 複数のColliderがある場合は意図した構成か確認
まとめ
リンドくんColliderとTriggerの違い、よくわかりました!
止めるか止めないかで考えればいいんですね。
たなべその通り!最初は迷うかもしれないけど、実際にゲームを作りながら試していけば自然と身につくよ。
まずは簡単なアイテム取得から始めてみてね!
今回は、Unityの当たり判定の基本であるColliderとTriggerの違いと使い分けについて解説しました。
ポイントをおさらいしましょう。
- Collider - 物理的にぶつかって止まる判定。壁、床、障害物に使用
- Trigger - すり抜けながら接触を検知する判定。アイテム取得、ゴール判定に使用
- コードの違い - Colliderは
OnCollision〇〇、TriggerはOnTrigger〇〇メソッドを使用 - Rigidbody必須 - 判定を動作させるには少なくとも片方にRigidbodyが必要
当たり判定はゲーム開発の基礎中の基礎です。この概念をしっかり理解しておくことで、キャラクターの移動、アイテムの取得、敵との戦闘など、あらゆるゲームシステムを作れるようになります。
最初は「壁」と「アイテム」のような簡単な例から始めて、徐々に複雑な判定システムに挑戦していきましょう。実際に手を動かしてみることが、理解を深める一番の近道です。
ぜひ今回学んだ内容を使って、自分だけのゲームを作ってみてください!





