Unity

【Unity】Colliderの使い方【isTrigger・OnCollision・OnTrigger】

この記事について

この記事ではColliderの種類・設定・isTrigger・衝突イベントについて学べます。

この記事で学べること

  • Colliderの基本的な役割と種類
  • Colliderの設定と意味
  • Rigidbodyとの関係と衝突判定の実装
  • Raycastを用いた当たり判定

UnityのColliderとは?

Collider(コライダー)とはUnityでオブジェクトに「当たり判定」を持たせるためのコンポーネントです。
見た目には表示されませんが、「物理エンジンに形状を伝える役割」を持っています。

ゲームでは「キャラが地面に立つ」「弾が敵に当たる」「プレイヤーがアイテムを拾う」など、ほぼすべての判定にColliderが使われています。

UnityのColliderの使い方

Collider(コライダー)はオブジェクトの形状を定義し、物理エンジンが衝突を認識するためのコンポーネントです。見た目には影響しませんが、ゲーム内での衝突判定やトリガーイベントに不可欠な要素です。

Colliderの役割
  • 物理演算を適用し、オブジェクトの衝突を検知
  • 他のオブジェクトとの接触時にイベントを発生させる
  • Rigidbodyと組み合わせることでリアルな物理挙動を実現

ColliderにはRigidbodyを使用することがほとんどなので以下のサイトも参考にしてください。

Colliderの基本設定

Colliderをオブジェクトに追加するには、以下の手順を行います。

  1. Hierarchy内のGameObjectを選択
  2. Inspectorで「Add Component」をクリック
  3. 「BoxCollider」 などの適切なColliderを追加
Unity Colliderの設定の画像

基本的なColliderの種類

Collider名特徴用途例
BoxCollider立方体の形状で衝突判定を行う箱や壁、床など
SphereCollider球形の衝突判定を行うボールやキャラクターの頭部
CapsuleCollider円柱形の衝突判定を行うキャラクターの全体的な当たり判定
MeshColliderメッシュの形状に合わせた衝突判定複雑な形状のオブジェクト
WheelCollider車のホイール用の特別なColliderレースゲームのタイヤ

Colliderのプロパティ

Colliderプロパティ説明
CenterColliderの中心座標を調整
Size当たり判定のサイズを変更(BoxColliderの場合)
Radius円柱形半径(SphereColliderやCapsuleColliderの場合)
Height高さ(CapsuleColliderの場合)
ConvexMeshColliderを凸形状として使用するか

IsTriggerの使い方

Colliderには「isTrigger」というオプションがあります。

  • isTrigger = false → 物理的な衝突を発生させる
  • isTrigger = true → 物理的な衝突なしに通過し、衝突イベントのみ検出

Colliderを用いた衝突判定の実装

物理的に衝突したとき(OnCollisionEnter)

物理的な衝突検出(isTrigger=Off)の時に使用するのが「OnCollisionEnter」です。
今回は2つのCubeを用意して両方にBoxCollider、一方にRigidbodyと「Enemy」タグを付けています。

using UnityEngine;

public class Collider_isTrigger : MonoBehaviour
{
    //この方法は isTrigger = false の場合に使用します。
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            Debug.Log("敵と衝突した!");
        }
    }
}

実行してみると、衝突判定がうまくいってますね。


※ Tagについては以下のサイトを参考にしてください。

すり抜け判定(OnTrigger)

すり抜け判定は「OnTriggerEnter」、「OnTriggerStay」、「OnTriggerExit」を使用します。

using UnityEngine;

public class Collider_isTrigger : MonoBehaviour
{
    //isTrigger = true のColliderを持つオブジェクトが他のオブジェクトと接触した際にイベントが発生します。
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.name + " が入った!");
    }
    private void OnTriggerStay(Collider other)
    {
        Debug.Log(other.name + " が中にいる");
    }
    private void OnTriggerExit(Collider other)
    {
        Debug.Log(other.name + " が出た!");
    }

 //移動用
    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += Vector3.right * Time.deltaTime * 5f;
        }
    }

}

実行してみると、大きいCube内に入ったとき、入っている際中、出た時で呼び出されてますね。

Raycastを用いたオブジェクト、距離判定

Colliderを用いたオブジェクトは前項までのような判定もできますが、Rayと呼ばれる見えない線を飛ばして判定することもできます。

まとめ

ColliderはUnityの物理エンジンを活用するために不可欠な要素であり、衝突判定やゲーム内イベントのトリガーとして幅広く使用されます。

  • ColliderにはBoxCollider、SphereCollider、MeshColliderなど様々な種類がある
  • isTriggerの設定で物理的な衝突とイベント検知を切り替え可能
  • OnCollisionEnterやOnTriggerEnterを活用してゲーム内の衝突イベントを実装