【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方

  • UnityでのTrigger(トリガー)を使った当たり判定の使い方を知りたい

その悩みを解決します。

この記事では

  • Triggerモードの説明
  • Triggerモードを使う条件
  • Trigger系のメソッドの使い方、説明

この3つを行います。

Gifを使って簡単に説明していきますので、ゆっくりご覧ください。

目次

Triggerモードはオブジェクト同士がすり抜ける

【Is Trigger】のチェックがスクリプトがアタッチされている方のみにチェックされているvar

オブジェクト同士が衝突したことは検出します。ただオブジェクト同士はすり抜けるので、ぶつかりません。

ただ衝突したことを検出するだけです。2Dでも3Dでも同じです。ただすり抜けていきます。

Triggerモードを使う条件

  • 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方にRigidbody(またはRigidbody2D)コンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方のColliderの【Is Trigger】がtrue(チェックあり)である

そんな衝突の検知しか行わないTriggerモードですが、使う条件があります。上の条件を満たさないと使うことができません。この条件を満たさないとTrigger系のメソッドを使うことができないです。

【Is Trigger】は片方で良いですよ。こんな【Unity】Is Triggerのチェックは両方につけるべきなの?いいえ片方でも結構です(Triggerモード)実験もしました。

では実際に使っていきます。

Triggerモードを実際に使ってみる

【Is Trigger】のチェックは片方だけでも良いのか実験

●爆弾
アタッチされてるもの
【Circle Collider2D】
【Rigidbody 2D】

●プレイヤー(緑のやつ)
アタッチされてるもの
【Box Collider 2D】
【PlayerControllerスクリプト(当然名前はなんでも良き)】

●両方の【IsTrigger】にチェックがついている(なお片方でおけ)

現在このような状態です。しっかりRigidbody2Dは1つはアタッチされているし、Colliderも両方ついているし、IsTriggerにもチェックしてある状態です。

Colliderは【Box Collider】でも【Circle Collider】でもColliderとつくものであればそれで構いません。

【OnTriggerEnter2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("miya");
    }
}

OnTriggerEnter2D トリガーに接触したときに呼び出される

接触したときに呼び出すことができるのが、【OnTriggerEnter2D】メソッドです。コンソールに【miya】と呼び出すようにしてます。

3Dで接触したときに呼び出したいなら【OnTriggerEnter】になります。

なんで【miya】なのって。saginomiyaのmiyaです( ・∇・)

実行例

【Is Trigger】のチェックがスクリプトがアタッチされている方のみにチェックされているvar

接触した瞬間に【OnTriggerEnter2D】が呼び出されてますね。

【OnTriggerStay2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnTriggerStay2D(Collider2D collision)
    {
        Debug.Log("miya");
    }
}

OnTriggerStay2D トリガーに接触している間呼び出される

接触しているときに呼び出すことができるのが、【OnTriggerStay2D】メソッドです。コンソールに【miya】と呼び出すようにしてます。

3Dで接触したときに呼び出したいなら【OnTriggerStay】になります。

実行例

 OnTriggerStay2Dメソッドの利用

接触している間、ずっと呼び出されます。コンソールに【miya】だらけになってしまいます。

【OnTriggerExit2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnTriggerExit2D(Collider2D collision)
    {
        Debug.Log("miya");
    }
}

OnTriggerExit2D トリガーに接触して、離れた瞬間に呼び出される

接触して離れたときに呼び出すことができるのが、【OnTriggerExit2D】メソッドです。コンソールに【miya】と呼び出すようにしてます。

3Dで接触したときに呼び出したいなら【OnTriggerExit2D】になります。

実行例

OnTriggerExit2Dメソッドの利用

接触して離れたときに呼び出されます。コンソールに【miya】だらけになってしまいます。

タグでわけることもできるよ

タグをつけて当たり判定を変更

タグとはタグの付け方についてはこちらの記事をご覧ください。このように赤い四角を用意しました。

赤い四角には【Box Collider 2D】と【Rigidbody 2D】をつけて、【Is Trigger】にもチェックをしています。

赤い四角に【red】とタグをつける

redタグを設定する

赤い四角に【red】というタグをつけました。

スクリプト例

コード

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

public class PlayerController : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "red")
        {
            Debug.Log("miya");       
        }
    }
}

OnTriggerEnter2D トリガーに接触したときに呼び出される

接触したときに呼び出すことができるのが、【OnTriggerEnter2D】メソッドです。タグ名が【red】のオブジェクトと接触したときに、コンソールに【miya】と呼び出すようにしてます。

 if (引数.gameObject.tag == "red"){A}

if文を使うことでタグ名によって、処理を変更できます。

例えば【Bakudan】というタグ名がついたオブジェクトと接触したときはプレイヤーを破壊する、【Star】というタグ名がついたオブジェクトと接触したときHPを上げるなど処理を変更できます。

実行例

タグによって当たり判定を変更

爆弾がぶつかったときはなにも起こりませが、「red」タグをもつ赤い四角とぶつかったときにメソッドが実行されています。

このようにタグによって処理を変更することができます。

Triggerモードで使えるメソッド

2Dで使えるメソッド

OnTriggerEnter2D トリガーに接触したときに呼び出される
OnTriggerStay2D トリガーに接触している間呼び出される
OnTriggerExit2D トリガーに接触して、離れた瞬間に呼び出される

これらです。

まあトリガーっていってますけど、オブジェクト同士が接触したときって発想で良いです。厳密には違いますが、わかりやすい方が良いもんね。

3Dで使えるメソッド

OnTriggerEnter トリガーに接触したときに呼び出される
OnTriggerStay トリガーに接触している間、呼び出される
OnTriggerExit トリガーに接触して、離れた瞬間に呼び出される

これらです。2Dでも3Dでもメソッド名が少し違うだけでほかはなにも変わりません。衝突したことを検知しますが、実際には当たらないですり抜けます。

まとめ

  • Unityでの当たり判定にはCollisionモードとTriggerモード
  • Triggerモードではオブジェクト同士はすり抜ける
  • タグによって当たり判定の処理を変えられる

●Triggerモードを使う条件

  • 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方にRigidbody(またはRigidbody2D)コンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方のColliderの【Is Trigger】がtrue(チェックあり)である
OnTriggerEnter2D トリガーに接触したときに呼び出される
OnTriggerStay2D トリガーに接触している間呼び出される
OnTriggerExit2D トリガーに接触して、離れた瞬間に呼び出される
OnTriggerEnter トリガーに接触したときに呼び出される
OnTriggerStay トリガーに接触している間、呼び出される
OnTriggerExit トリガーに接触して、離れた瞬間に呼び出される

まとめが多くなってしまった。少しでも当たり判定の勉強に参考になれば嬉しいです。

あわせて読みたい
【Unity】Is Triggerのチェックは両方につけるべきなの?いいえ片方でも結構です(Triggerモード) UnityでTriggerモード(すり抜ける)タイプの当たり判定を作りたい 衝突するオブジェクト両方に【Is Trigger】ってチェック(true)すべきなの? その悩みを解決します...

さぎのみや(@saginomiya8)でした。

T当たり判定のトリガーの使い方

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次