【unity入門】unity2Dすり抜けた時の当たり判定を行う

unityでゲームを作っていると、プレイヤーがアイテムを取得した時など、すり抜けた時の当たり判定を行いたい場合があると思います。

この記事では2dでのすり抜けた時の当たり判定のやり方について扱います。

やること

1.オブジェクトに重力を加える
2.オブジェクトにColliderを付け加える
3.スクリプトにOnTriggerEnter2Dを書き込む

準備

canvasの作成

unity2Dでプロジェクトを作ったら、まずはcanvasを作成しましょう。

Create>UI>Canvasで作成できます。

canvasの設定

canvasを作成したら、カメラがcanvasを映すように設定しましょう。

unityではカメラが映した映像がゲーム画面となるので、canvasがゲーム画面となることを意味しています。

カメラがcanvasを映すように設定するにはcanvasオブジェクトを選択した状態で、canvasコンポーネントのRenderModeを『Screen Space- Camera』に変更します。

これで、カメラがcanvasを映すようになりました。

次にどのカメラオブジェクトがcanvasを映すのか設定します。

そのためにRender Camaraの部分にCameraオブジェクトをドラッグ&ドロップします。

オブジェクトを作成

次は衝突をさせるためにオブジェクトを二つ作成します。

今回はimageオブジェクトを作成したいと思います。

create>UI> Imageで作成できます。

作成したImageオブジェクトを複製してもう一つ作ります。

Imageオブジェクトを選択した状態で、右クリック>Duplicateでできます。

今回はオブジェクトを落下させて衝突させるので、下記の画像のように位置を整えてください。

オブジェクトに重力を加える

上のオブジェクトに重力を加えて落ちてくるようにしましょう。

2Dオブジェクトに重力を加えるにはRigidbody2Dというコンポーネントを追加します。

Rigidbody2Dは追加したオブジェクトに物理現象を適応します。

上のオブジェクトを選択した状態で、InspectorからAddComponent>Physics 2Dを選択してください。

その後Rigidbody 2Dを選択です。

これで上のオブジェクトにRigidbody2Dが加わり、物理現象が適応されました。

実際に落ちてくるのか確認してみましょう。

しっかり落ちてきていますね!

しかし、この状態ではオブジェクトがすり抜けたか判断できません

人間が見た時にはすれ違っているかわかりますが、unityは判断できないということです。

unityがすれ違ったか判断できるようにColliderというコンポーネントを付け加えましょう

オブジェクトにColliderを付け加える

二つのオブジェクトにColliderコンポーネントを付け加えてすり抜けるようにしましょう。

一個づつ追加していくのは面倒なので二つまとめて追加していきます。

二つのオブジェクトを選択

Colliderコンポーネントをまとめて追加するために、まずは二つのオブジェクトを選択してください。

複数のオブジェクトを選択するには、一つのオブジェクトを選択した状態で

選択したいオブジェクトを『command + クリック』です。

Colliderコンポーネントを追加

それではColliderコンポーネントを追加していきましょう。

二つのオブジェクトを選択した状態でInspectorからAdd Component>Physics 2Dを押し、

BoxCollider 2Dを押します。

これでColliderが追加されました。

colliderのサイズ変更

colliderに関してはまだやることがあります。

サイズの変更をする必要があります。

オブジェクトのサイズをみてください。

横と縦の大きさがどちらも100ですね。

一方でColliderの大きさはどちらも1です。

ですのでcolliderの大きさをオブジェクトの大きさに合わせてxy共に100に変更しましょう。

再生してみる

この状態で再生してみましょう。

この段階ではぶつかってしまいます。

今回はすり抜けさせたいので、オブジェクトがすり抜けるようにしていきましょう。

オブジェクトをすり抜けさせる

オブジェクトをすり抜けさせるには、colliderコンポーネントの『Is Trigger』にチェックを入れるだけです。

やり方としては二つのオブジェクトを選択した状態で、

『Is Trigger』にチェックを入れましょう。

これですり抜けるようになりました。

再生して確かめてみましょう。

実行結果は、

オブジェクトがすり抜けていますね!

次はスクリプトを作成して、すり抜けた時の処理を書いていきましょう。

スクリプトにOnTriggerEnter2D()を書き込む

スクリプトの作成

まずはスクリプトを作成します。

ProjectビューからCreate>C#Scriptをクリックすることで作成できます。

作成したら名前をCubeManagerとでもしておきましょうか。

スクリプトを結びつける

スクリプトで上側のオブジェクトを制御できるようにしていきます。

そのために作成したスクリプトを上側のオブジェクトに結びつけます。

これで上のオブジェクトにスクリプトが結びつきました。

スクリプトにOnTriggerEnter2D()を書き込む

先ほど作成したスクリプトにすり抜けた時の処理を書いていきます。

衝突時の処理はOnTriggerEnter2D()の中に記述します。

スタート時の処理はStart()の中に書きますよね?

それと同じような感じです。

OnTriggerEnter2D()はこのように書きます。

void OnTriggerEnter2D(Collider2D 変数(当たったオブジェクトが格納される))
    {
        //当たった時の処理
    }


サンプルコード

例としてすり抜けた時に下のオブジェクトを消すコードを書いていきましょう。

コードは下記の通りです。

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

public class CubeManager : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    //当たった時の処理
    void OnTriggerEnter2D(Collider2D collider)
    {
        //当たったオブジェクトを消す
        Destroy(collider.gameObject);
    }
}

実行結果は、

意図した通りになっていますね!

まとめ

この記事ではunity2Dですり抜けた時の処理を実装していきました。

この記事を読んで2dのすり抜けた時のコードが書けるようになったのなら幸いです!