Unity入門

【Unity】Colliderの使い方|IsTrigger、OnCollisionEnter・OnTriggerEnter

Unityでオブジェクト同士の衝突を検知するために必要なのが「Collider」です。適切に設定することで、物理エンジンと連携し、ゲーム内での衝突判定やイベント発生をスムーズに管理できます。

この記事で学べること

  • Colliderの基本的な役割と種類
  • Colliderの設定と意味
  • Rigidbodyとの関係と衝突判定の実装
  • Colliderを活用したゲーム開発のテクニック

UnityのColliderの使い方

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

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

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

Colliderの基本設定

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

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

Colliderのプロパティ

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

Colliderの種類と特徴

Unityには複数のColliderがあり、用途によって使い分ける必要があります。

基本的なColliderの種類

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

IsTriggerの使い方

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

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

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

Colliderを用いてオブジェクトが衝突した際にイベントを発生させる方法を紹介します。
※ Tagについては以下のサイトを参考にしてください。

① 物理的な衝突を検出(OnCollisionEnter)

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

② トリガーによる衝突判定(OnTriggerEnter)

//isTrigger = true のColliderを持つオブジェクトが他のオブジェクトと接触した際にイベントが発生します。
void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Item")
    {
        Debug.Log("アイテムを取得した!");
    }
}

Colliderを活用したゲーム開発テクニック

① プレイヤーの攻撃判定を作る

攻撃用の判定にはTriggerを使用します。

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Enemy")
    {
        Destroy(other.gameObject);
        Debug.Log("敵を倒した!");
    }
}

② 地面との接触判定

キャラクターが地面にいるかどうかを判定するのに役立ちます。

bool isGrounded;
void OnCollisionStay(Collision collision)
{
    if (collision.gameObject.tag == "Ground")
    {
        isGrounded = true;
    }
}

void OnCollisionExit(Collision collision)
{
    if (collision.gameObject.tag == "Ground")
    {
        isGrounded = false;
    }
}

③ アイテムの取得

アイテムを取得する際にはisTriggerを活用します。

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Item"))
    {
        Destroy(other.gameObject);
        Debug.Log("アイテム取得!");
    }
}

まとめ

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

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