【unity入門】unity2Dすり抜けた時の当たり判定を行う
![](https://mogi0506.com/wp-content/uploads/2019/03/uriel-soberanes-1444996-unsplash-1024x683.jpg)
unityでゲームを作っていると、プレイヤーがアイテムを取得した時など、すり抜けた時の当たり判定を行いたい場合があると思います。
この記事では2dでのすり抜けた時の当たり判定のやり方について扱います。
この記事の目次
やること
1.オブジェクトに重力を加える
2.オブジェクトにColliderを付け加える
3.スクリプトにOnTriggerEnter2Dを書き込む
準備
canvasの作成
unity2Dでプロジェクトを作ったら、まずはcanvasを作成しましょう。
Create>UI>Canvasで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-02-23.43.59.png)
canvasの設定
canvasを作成したら、カメラがcanvasを映すように設定しましょう。
unityではカメラが映した映像がゲーム画面となるので、canvasがゲーム画面となることを意味しています。
カメラがcanvasを映すように設定するにはcanvasオブジェクトを選択した状態で、canvasコンポーネントのRenderModeを『Screen Space- Camera』に変更します。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-02-23.51.28.png)
これで、カメラがcanvasを映すようになりました。
次にどのカメラオブジェクトがcanvasを映すのか設定します。
そのためにRender Camaraの部分にCameraオブジェクトをドラッグ&ドロップします。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-1.gif)
オブジェクトを作成
次は衝突をさせるためにオブジェクトを二つ作成します。
今回はimageオブジェクトを作成したいと思います。
create>UI> Imageで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-08-23.55.10.png)
作成したImageオブジェクトを複製してもう一つ作ります。
Imageオブジェクトを選択した状態で、右クリック>Duplicateでできます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-08-23.58.24.png)
今回はオブジェクトを落下させて衝突させるので、下記の画像のように位置を整えてください。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-08-23.59.50.png)
オブジェクトに重力を加える
上のオブジェクトに重力を加えて落ちてくるようにしましょう。
2Dオブジェクトに重力を加えるにはRigidbody2Dというコンポーネントを追加します。
Rigidbody2Dは追加したオブジェクトに物理現象を適応します。
上のオブジェクトを選択した状態で、InspectorからAddComponent>Physics 2Dを選択してください。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-13.56.27.png)
その後Rigidbody 2Dを選択です。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-13.56.58.png)
これで上のオブジェクトにRigidbody2Dが加わり、物理現象が適応されました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.09.49.png)
実際に落ちてくるのか確認してみましょう。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-17.gif)
しっかり落ちてきていますね!
しかし、この状態ではオブジェクトがすり抜けたか判断できません。
人間が見た時にはすれ違っているかわかりますが、unityは判断できないということです。
unityがすれ違ったか判断できるようにColliderというコンポーネントを付け加えましょう
オブジェクトにColliderを付け加える
二つのオブジェクトにColliderコンポーネントを付け加えてすり抜けるようにしましょう。
一個づつ追加していくのは面倒なので二つまとめて追加していきます。
二つのオブジェクトを選択
Colliderコンポーネントをまとめて追加するために、まずは二つのオブジェクトを選択してください。
複数のオブジェクトを選択するには、一つのオブジェクトを選択した状態で
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.26.55.png)
選択したいオブジェクトを『command + クリック』です。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.27.11.png)
Colliderコンポーネントを追加
それではColliderコンポーネントを追加していきましょう。
二つのオブジェクトを選択した状態でInspectorからAdd Component>Physics 2Dを押し、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.32.22.png)
BoxCollider 2Dを押します。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.35.12.png)
これでColliderが追加されました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.46.56.png)
colliderのサイズ変更
colliderに関してはまだやることがあります。
サイズの変更をする必要があります。
オブジェクトのサイズをみてください。
横と縦の大きさがどちらも100ですね。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.53.58.png)
一方でColliderの大きさはどちらも1です。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-14.53.01.png)
ですのでcolliderの大きさをオブジェクトの大きさに合わせてxy共に100に変更しましょう。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-15.00.45.png)
再生してみる
この状態で再生してみましょう。
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-18.gif)
この段階ではぶつかってしまいます。
今回はすり抜けさせたいので、オブジェクトがすり抜けるようにしていきましょう。
オブジェクトをすり抜けさせる
オブジェクトをすり抜けさせるには、colliderコンポーネントの『Is Trigger』にチェックを入れるだけです。
やり方としては二つのオブジェクトを選択した状態で、
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-23-12.44.10.png)
『Is Trigger』にチェックを入れましょう。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-23-12.44.46.png)
これですり抜けるようになりました。
再生して確かめてみましょう。
実行結果は、
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-21.gif)
オブジェクトがすり抜けていますね!
次はスクリプトを作成して、すり抜けた時の処理を書いていきましょう。
スクリプトにOnTriggerEnter2D()を書き込む
スクリプトの作成
まずはスクリプトを作成します。
ProjectビューからCreate>C#Scriptをクリックすることで作成できます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-15.20.12.png)
作成したら名前をCubeManagerとでもしておきましょうか。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-15.22.28.png)
スクリプトを結びつける
スクリプトで上側のオブジェクトを制御できるようにしていきます。
そのために作成したスクリプトを上側のオブジェクトに結びつけます。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-15.26.26.png)
これで上のオブジェクトにスクリプトが結びつきました。
![](https://mogi0506.com/wp-content/uploads/2019/03/スクリーンショット-0031-03-22-15.26.43.png)
スクリプトに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);
}
}
実行結果は、
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-22.gif)
意図した通りになっていますね!
まとめ
この記事ではunity2Dですり抜けた時の処理を実装していきました。
この記事を読んで2dのすり抜けた時のコードが書けるようになったのなら幸いです!