【Unity】当たり判定を一通り!OnTrigger・OnCollisionをひとまとめ

unityで当たり判定をする時にはOnTriggerEnterやOnCollisionEnterなどいくつかの関数が使われます。

しかし、はじめのうちはどの関数を使えば良いかよくわからなかったりしますよね。

この記事では、

・当たり判定取得の説明

といった基本的なことや、

・当たり判定を取得する各種関数の違い

といった少し応用的なことまでわかりやすく解説します!

Unityで当たり判定を取得するには?

unityで当たり判定を取得するにはコンポーネントを用います。

コンポーネントとはオブジェクトに追加することで様々なことをできるようにするための機能です。

当たり判定を行うために必要なコンポーネントとして主に二つあります。

一つ目が『〜Collider』です。

『〜』の部分にはboxやSphereなど形状が入り、物理衝突のための形状をオブジェクトに与えます。

二つ目が『Rigidbody』です。

これはオブジェクトに物理特性を与えるコンポーネントです。

当たり判定にはこれら二つのコンポーネントが必要です。

当たり判定についての詳しい説明は下記の記事を参考にしてください。

【Unity入門】1からわかる当たり判定!衝突や判定方法を学ぼう
更新日:2023年3月21日

【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

判定を取得する関数たちの違い!

判定を取得する関数たちは名前に「Collider」とつくものと、「Trigger」とつくものに大きく分かれます。

両者の違いは物体同士が当たった時の処理が「Collider」で、物体がすり抜けた時の処理が「Trigger」です。

それでは、判定を取得する関数のコードと動きをみていきましょう。

下準備としてオブジェクトを二つ配置しておきます。

また、上側のオブジェクトにはコンポーネント「BoxCollider」、「Script」、「Rigidbody」を追加しておきます。

3Dオブジェクトであれば「BoxCollider」はオブジェクト作成時に追加されます。

OnCollisionEnter

OnCollisionEnterは物体同士がぶつかった時に呼ばれます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

    void OnCollisionEnter(Collision collision)
    {
        Debug.Log("当たった!");
    }
}

OnTriggerEnter

OnTriggerEnterは物体がすり抜けた時に呼ばれます。

物体をすり抜けさせるには「BoxCollider」の「Is Trigger」にチェックを入れましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

    void OnTriggerEnter(Collider other)
    {
        Debug.Log("すり抜けた!");
    }
}

OnCollisionStay

OnCollisionStayは物体が当たっている時に呼ばれ続けます。

OnTriggerEnterとの違いはOnTriggerEnterは当たった時の一回しか呼ばれませんが、OnCollisionStayは当たっている間ずっと呼ばれ続ける点です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

    void OnCollisionStay(Collision collision)
    {
        Debug.Log("当たっている");
    }

}

OnTriggerStay

OnTriggerStayは物体がすり抜けている時に呼ばれ続けます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{

    void OnTriggerStay(Collider other)
    {
        Debug.Log("すり抜けている");
    }
}

OnCollisionExit

OnCollisionExitは触れ合っている物体が離れた時に呼ばれます。

今回は上のオブジェクトがジャンプをできるようにして、下のオブジェクトと離れられるようにしましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        //スペースボタンを押したらジャンプ
        if (Input.GetKey(KeyCode.Space))
        {
            GetComponent<Rigidbody>().velocity = new Vector3(0,5,0);
        }
    }

    void OnCollisionExit(Collision other)
    {
        Debug.Log("離れた!");
    }
}

OnTriggerExit

OnTriggerExitは物体が通り抜け終えた時に呼ばれます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void OnTriggerExit(Collider other)
    {
        Debug.Log("通り抜け終えた");
    }
}

まとめ

いかがでしたか?

この記事ではOnTriggerEnterやOnCollisionEnterなどの当たり判定について扱ってきました。

当たり判定はよく使う技術なので、この記事を参考に使いこなせるようになりましょう!

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

Writer

sato

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close