【Unity】当たり判定【Collision】モードの設定方法、メソッドの使い方

  • UnityでのCollisionモードを使った当たり判定の使い方を知りたい

その悩みを解決します。

この記事では

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

この3つを行います。

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

そもそ当たり判定って?という場合はこちら

あわせて読みたい
【Unity】当たり判定とは?Colliderが当たり判定には必要 Unityでの当たり判定の仕組みや作り方がよくわからない という悩みを解決します。 この記事では、 当たり判定とは 当たり判定をするための2つのモード Collisionモード...
目次

Collisionモードはオブジェクト同士が衝突する

Collisionモードはオブジェクト同士が衝突する

Collisionモードだと物理的な当たり判定で、オブジェクト同士がぶつかり、衝突検出+衝突応答も実行されます。

衝突検出
→オブジェクトとぶつかったことを検出

衝突応答(衝突したあと)
→爆弾とプレイヤーがぶつかったことにより、衝突後に動く

です。Triggerモードみたいにオブジェクトがすり抜けませんね。

Collisionモードを使うための条件やColliderモードのときにだけ使えるメソッドがあります。

Collisionモードを使う条件

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

判定したいオブジェクトが上の条件を満たしていなければ、Collisionモードを使うことができません。

Rigidbodyコンポーネントといっていますが、2Dの場合でいうRigidbody2Dを表しています。

実際に使ってみる

当たり判定で使うオブジェクトのコンポーネント

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

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

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

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

1つでもIsTriggerにチェックがついているとオブジェクトがすり抜けてしまうので、気をつけてください。

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

【OnCollisionEnter2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnCollisionEnter2D(Collision2D collision)
    {
        Debug.Log("miya");
    }
}

OnCollisionEnter2D 接触したときに呼び出される

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

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

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

実行例

Unityの【OnCollisionEnter2D】メソッドを使う

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

【OnCollisionStay2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnCollisionStay2D(Collision2D collision)
    {
        Debug.Log("miya");
    }
}

OnCollisionStay2D 接触している間呼び出される

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

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

実行例

Unityの【OnCollisionStay2D】メソッドを使う

接触している間、ずっと呼び出されます。30って表記されてますね。30回も呼び出されています。

【OnCollisionExit2D】実際を使う

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnCollisionExit2D(Collision2D collision)
    {
        Debug.Log("miya");
    }
}

OnCollisionExit2D 接触して、離れた瞬間に呼び出される

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

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

実行例

Unityの【OnCollisionExit2D】メソッドを使う

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

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

タグを設定したオブジェクトを衝突させる

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

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

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

タグを設定して【OnCollisionEnter2D】を実行

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

スクリプト例

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

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

OnCollisionEnter2D 接触したときに呼び出される

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

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

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

例えば【Bakudan】というタグ名がついたオブジェクトと接触したときはプレイヤーを破壊する、【Star】というタグ名がついたオブジェクトと接触したとき

実行例

タグをつけてOnCollisionEnter2Dを使う

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

このようにタグによって処理を変更することができます。もちろん【OnCollisionStay2D】でも【OnCollisionExit2D】でもタグによって、処理を変更できます。

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

2Dで使えるメソッド

OnCollisionEnter2D 接触したときに呼び出される
OnCollisionStay2D 接触している間呼び出される
OnCollisionExit2D 接触して、離れた瞬間に呼び出される

これらです。

3Dで使えるメソッド

OnCollisionEnter 接触したときに呼び出される
OnCollisionStay 接触している間、呼び出される
OnCollisionExit 接触して、離れた瞬間に呼び出される

これらです。

まとめ

  • Unityでの当たり判定にはCollisionモードとTriggerモード
  • Collisionモードではオブジェクト同士は衝突する
  • タグによって当たり判定の処理を変えられる
OnCollisionEnter2D 接触したときに呼び出される
OnCollisionStay2D 接触している間呼び出される
OnCollisionExit2D 接触して、離れた瞬間に呼び出される
OnCollisionEnter 接触したときに呼び出される
OnCollisionStay 接触している間、呼び出される
OnCollisionExit 接触して、離れた瞬間に呼び出される

まとめが多くなりました。

こちらの【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろうもご覧ください。

あわせて読みたい
【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろう【チュートリアル】 ▼この記事を先に見ておきましょう▼ https://miyagame.net/basis-cs/ 当サイトではUnityでのサンプルゲームを作成することができます。Unityでゲームを作っていきましょ...

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

あわせて読みたい
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方 UnityでのTrigger(トリガー)を使った当たり判定の使い方を知りたい その悩みを解決します。 この記事では Triggerモードの説明 Triggerモードを使う条件 Trigger系の...
当たり判定【Collision】モードの設定方法、メソッドの使い方

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

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

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次