【Unity/C#】OnCollisionEnter2D(衝突検知)の基本と仕組み

Unityコード専用検索

コードの型

衝突した瞬間に自動的に呼ばれるメソッドです。

C#

void OnCollisionEnter2D(Collision2D collision)
{
    // 何かにぶつかった瞬間に実行したい処理
    Debug.Log("何かにぶつかりました!");
}

コードの仕組み

Unityの物理エンジンが「今、このオブジェクトが何かに当たった!」と判断したときに、自動で呼び出してくれるメソッドです。

  • 自動検知: プログラマーが呼び出すのではなく、衝突したときにUnity側から話しかけてもらう仕組みです。
  • collision引数: collision という名前の変数の中に、「誰とぶつかったか?」という情報がすべて詰まっています。

活用例(コイン落としやアクションゲーム)

壁に当たって跳ね返る音を鳴らしたり、敵に当たってダメージを受ける判定に使います。

C#

void OnCollisionEnter2D(Collision2D collision)
{
    // もし「Wall」というタグがついたオブジェクトに当たったら
    if (collision.gameObject.CompareTag("Wall"))
    {
        Debug.Log("壁にドン!");
    }
}

その他(重要ポイント)

  • 必須条件:
    1. 両方のオブジェクトに Collider2D(当たり判定の形)が付いていること。
    2. 少なくともどちらか一方に Rigidbody2D が付いていること。 これがないと、どれだけぶつかっても反応しません。
  • OnTriggerEnter2D との使い分け:
    • OnCollisionEnter2D: 物理的に「ぶつかって跳ね返る」場合。
    • OnTriggerEnter2D: 物理的な跳ね返りはせず、「エリアに入ったかどうかだけ」を検知したい場合(コインの獲得やゴール判定など)。
  • メソッド名は変えない: スペルを間違えると動きません。On Collision Enter 2D と、大文字・小文字を正確に書いてください。

初心者向けまとめ

OnCollisionEnter2D は、「衝突事故の通報システム」です。

  • 物体がぶつかると、Unityから「〇〇さんとぶつかりましたよ!」と通報が入ります。
  • この通報を受け取った時だけ、「音を鳴らす」「スコアを減らす」「自分を消す」といった処理を走らせるのが、このメソッドの役割です。

コメント

タイトルとURLをコピーしました