【Unity】
2Dゲームで当たり判定をしてオブジェクトの衝突時に処理を実行する方法

OnCollisionEnter2D()の使い方

投稿日 2022/11/04 更新日 2022/11/04


こんにちは。IT業界歴3年目の「元木皇天」です。

今回はUnityで「当たり判定をしてオブジェクトの衝突時に処理を実行する」方法について画像つきで丁寧に解説したいと思います。

環境
OS:MacOS BigSur
Unity:バージョン2021.3.11f1

やりたいこと

当たり判定をしてオブジェクトの衝突時に処理を実行する(2Dゲーム)

例)ボールが床に当たったらゲームオーバーの文字を表示する

参考文献

UnityではじめるC# 基礎編 改訂版
Unity - OnCollisionEnter2D()
Unity - Tags-Layer マニュアル
Unity - Tags マニュアル

事前準備

今回は、「ボックス」と「床」の当たり判定を使用して、衝突時に「Game Over」の文字を表示させるようにします。

以下のような感じでオブジェクトを用意します。

Box
Rigitbody2Dを付与して重力で落ちるようにします
Box Collider2Dを設定します
BoxManager.csを設定します(ここに衝突時の処理を記載します)

Floor
Box Collider2Dを設定します

TextGameOver
GameOverの文字です。初期状態では非表示にしています。

準備1

次にFloorに「Floor」というタグを設定します。

タグを設定することで、衝突があったときにどのオブジェクトで衝突があったかを判定することができるようになります。

準備2タグの設定

以上で準備は終了です。

当たり判定をして処理を実行する

当たり判定して処理を実行するには「OnCollisionEnter2D()」を使用します。

以下は「Floor」というタグを持つオブジェクトと衝突したらゲームオーバーの文字を表示させる処理の例です。

//省略

public class BoxManager : MonoBehaviour{
    //省略
    public GameObject text;

    //衝突時の処理
    private void OnCollisionEnter2D(Collision2D other) {
        if(other.gameObject.tag == "Floor"){
            //GameOverを表示する
            text.SetActive(true);
        }
    }
}

UnityではColliderを設定したオブジェクト同士の当たり判定は自動で行ってくれます。

当たり判定が行われた時に、「OnCollisionEnter2D()」が自動的に呼び出されるので、その中でどのオブジェクトと衝突したのかをタグで判定して、処理を実行してあげればOKです。

まとめ

Unityでは当たり判定は自動で行ってくれる

衝突時の処理は OnCollisionEnter2D()
に記載する。

参考文献・おすすめ文献

Unity - OnCollisionEnter2D()
Unity - Tags-Layer マニュアル
Unity - Tags マニュアル