▼そのUnityの作業、依頼しませんか?
基本知識

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

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

その悩みを解決します。

この記事では

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

この3つを行います。

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

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

Unityでの当たり判定の説明と使う条件
【Unity】当たり判定とは?Colliderが当たり判定には必要「Unityでの当たり判定の仕組みや作り方がよくわからない」という悩みを解決します。この記事では「当たり判定とは」、「当たり判定をするための2つのモード」、「Collisionモードの説明」「Triggerモードの説明」を行います。...

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サンプルゲーム】動画よりわかりやすく記事でゲームを作ろうもご覧ください。

Unityサンプルゲーム
【Unity2D&3Dサンプルゲーム】動画よりわかりやすく記事でゲームを作ろう【チュートリアル】【Unity2D&3Dサンプルゲーム・チュートリアル】Unityにおいてのサンプルゲームの作り方が書いてある記事って少ないですよね。そこで当サイトUnishar(ユニシャー)が動画よりわかりやすいサンプルゲームを無料で提供します。...

さぎのみや(@saginomiya8)でした。SNSでシェアしてね( ・∇・) 一生無双モードで頑張る。

T当たり判定のトリガーの使い方
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方「Trigger(トリガー)を使った当たり判定の使い方を知りたい」その悩みを解決します。この記事では「triggerモードの説明」、「Triggerモードを使う条件」「Trigger系のメソッドの使い方、説明」この3つを行います。...
ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるサンプルゲームとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム】うちのポチが危ないところでフリスビーを要求する理由を教えてくれ

>>BOOTHでサンプルゲームを見る

【シェア・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

pixivFANBOXのフォローであなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)
>>さぎのみやのpixivFANBOX

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


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