【Unity】Rigidbody・Colliderでの衝突判定を復習する

どーも、ぐるたか@guru_takaです。

Unityで衝突判定したいとき、いつもググっているなぁ…と思い、いちど整理することにしました。

MEMO
Unityのバージョンは2018.3です。

衝突判定の種類

Unityの衝突判定には2種類あります。具体的には

  • Collision:オブジェクト同士がぶつかった時
  • Triger:オブジェクト同士がぶつからずに触れている時

です。

前者は一般的な物体同士の検出です。後者はゴールに到着したら判定する時などに使用します。

CollisionとTriggerの関数

CollisionとTriggerで使う関数は以下の通りです!

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

public class ColisionDetecter : MonoBehaviour
{

    /////////////////////////////////////
    ///Collision系
    /////////////////////////////////////

    //オブジェクトが衝突した瞬間
    void OnCollisionEnter(Collision other)
    {
    }

    //オブジェクト同士が離れた瞬間
    void OnCollisionExit(Collision other)
    {
    }

    //オブジェクト同士が接触し続けている間
    void OnCollisionStay(Collision other)
    {
    }

    /////////////////////////////////////
    ///Trigger系
    /////////////////////////////////////

    ///オブジェクトが触れた瞬間
    void OnTriggerEnter(Collider other)
    {
    }

    //オブジェクトが離れた瞬間
    void OnTriggerExit(Collider other)
    {
    }

    //オブジェクト同士が触れ続けている間
    void OnTriggerStay(Collider other)
    {
    }
}

CollisionとTriggerでの衝突検知の条件

衝突検知できる条件でよく混乱してしまうので、まとめてみました!

Collisionでの衝突条件

Component Scriptがアタッチされた
オブジェクト
衝突されるオブジェクト
Collider 必須+『is Trigger』off 必須+『is Trigger』off
Rigidbody 必須+『is Kinematic』off どちらでもOK


MEMO
ScriptがアタッチされたオブジェクトにてRigidbody『is Kinematic』ONをにした場合、衝突されたオブジェクトがRigidbody『is Kinematic』OFFであれば、Collisionを検出できます!

Triggerでの衝突条件

Component Scriptがアタッチされた
オブジェクト
衝突されるオブジェクト
Collider 必須 必須
Collider
『Is Trigger』
どちらかがONであればOK!
Rigidbody どちらかにアタッチしてればOK!

最後に

以上になります。2Dでの衝突判定では、OnTriggerEnter2D(Collider2D other){}のように、2Dがつくのでご注意ください!

Unityでの衝突判定の参考になれば幸いです。

参考リンク

コメントを残す