Unity技術資料:トリガーイベントと衝突イベントの発生条件

UnityでOnTriggerおよびOnCollisionイベントを発生させるための条件や設定についての技術資料です。この資料では、トリガーおよび衝突イベントの基礎知識、発生条件、具体的な設定方法、イベントが発生しない場合のトラブルシューティングを解説します。


各種イベント

1. トリガーイベント (OnTrigger Events)

主なメソッド

メソッド説明
OnTriggerEnter他のオブジェクトがトリガー領域に入ったときに発生。
OnTriggerStay他のオブジェクトがトリガー領域内に滞在しているとき、毎フレーム発生。
OnTriggerExit他のオブジェクトがトリガー領域から退出したときに発生。

発生条件

  • コライダーの設定
    • トリガーイベントを発生させたいオブジェクトにColliderコンポーネントを追加します。
    • 「is Trigger」オプションtrueに設定します。この設定により、物理的な衝突ではなく、トリガーとして動作します。
  • Rigidbodyの設定
    • OnTriggerイベントは、少なくとも一方のオブジェクトにRigidbodyコンポーネントが必要です。
    • トリガーとして動作するオブジェクト、またはトリガーエリアに入るオブジェクトにRigidbodyを追加します。

実装例

以下は、プレイヤーがトリガー領域に入ったときにログを出力する例です。

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log("Player has entered the trigger area.");
        // プレイヤーがトリガー領域に入った際の処理
    }
}

2. 衝突イベント (OnCollision Events)

主なメソッド

メソッド説明
OnCollisionEnter他のオブジェクトと衝突した瞬間に発生。
OnCollisionStay他のオブジェクトとの衝突が続いている間、毎フレーム発生。
OnCollisionExit他のオブジェクトとの衝突が終了したときに発生。

発生条件

  • コライダーの設定
    • 衝突イベントを発生させたいオブジェクトにColliderコンポーネントを追加し、「is Trigger」オプションfalseに設定します。
  • Rigidbodyの設定
    • OnCollisionイベントも、少なくとも一方のオブジェクトにRigidbodyコンポーネントが必要です。

実装例

以下は、オブジェクトが障害物と衝突したときにログを出力する例です。

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Obstacle"))
    {
        Debug.Log("Collided with an obstacle.");
        // 障害物との衝突時の処理
    }
}

3. トリガーと衝突イベントが発生しない場合の確認事項

「is Trigger」の設定を確認

  • トリガーイベントの場合、isTriggertrueに設定されているか確認。
  • 衝突イベントの場合、isTriggerfalseに設定されているか確認。

Rigidbodyの有無

  • 少なくとも一方のオブジェクトにRigidbodyコンポーネントが設定されていることを確認します。

レイヤーの設定

  • レイヤー設定によっては、物理的な衝突が無視されることがあります。Edit > Project Settings > Physicsにて、レイヤー間の衝突が無効化されていないか確認してください。

この資料に従って設定することで、UnityにおけるOnTriggerおよびOnCollisionイベントの発生条件を満たし、ゲームオブジェクトのインタラクションを適切に制御できるようになります。

参考

Unity,イベント

Posted by hidepon