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

unityでゲームを作っていると、プレイヤーがアイテムを取得した時など、すり抜けた時の当たり判定を行いたい場合があると思います。
この記事では3dでのすり抜けた時の当たり判定のやり方について扱います。
この記事の目次
やること
1.オブジェクトにColliderを付け加える
2.スクリプトにOnTriggerEnter()を書き込む
準備
オブジェクトを用意する
まずはunity3Dでプロジェクトを作成してください。
作成したら、すり抜けさせるためのオブジェクトを二つ用意します。
今回はオブジェクトを落下させてすり抜けさせるので、落下したらすり抜けるように配置してください。

わかりやすくするために下のオブジェクトを大きくしましょう。
下のオブジェクトのscaleをx10, y1 , z10程度にすれば良いと思います。


上のオブジェクトに重力を加える
このままの状態では上のオブジェクトは落下しません。
落下させるためには上のオブジェクトに物理現象を適応させるためのコンポーネントを追加する必要があります。
『Rigidbody』というコンポーネントです。
上にあるオブジェクトを選択し、AddComponent>Physicsを選択してください。

その後Rigidbodyを選択することで追加されます。

これで上のオブジェクトに重力などの物理現象が適応されるようになりました。
再生したら上のオブジェクトだけが落ちるようになります。
スクリプトを用意する
処理を書き込むスクリプトを用意します。
まずはスクリプトを作成してください。
作成したら、上側のオブジェクトにアタッチしてください。

オブジェクトにColliderを付け加える
Colliderについて
準備ができたのですり抜けた時の当たり判定を実装していきましょう!
オブジェクトに『Collider』というコンポーネントを付け加えます。
Colliderはオブジェクトがぶつかるようにするためのコンポーネントです。
Colliderをつけなければオブジェクト同士はぶつかることはなく、すり抜けてしまいます。
付け加える
Colliderを付け加えていくのですが…
実はもうついています!
実は3Dオブジェクトには作成時にColliderが付け加えられるのです。
ですので、Colliderに関しては特にやることはないですね。
2Dオブジェクトの場合はColliderを自分でつける必要があるので注意してください!
すり抜けるようにする
Colliderはすでに付いているのですが、初期設定ではオブジェクト同士が当たった時にぶつかるようになっています。
ですので、設定を変更してすり抜けるようにしていきましょう。
設定の仕方は簡単で、二つのオブジェクトを選択した状態で

InspectorビューからBox Colliderコンポーネントの『Is Trigger』にチェックを入れるだけです。

再生してみる
ここまでで一回再生してみましょう。
うまくいっていればすり抜けるはずです。

意図した通りすり抜けましたね!
スクリプトにOnTriggerEnter()を書き込む
先ほど作成したスクリプトにすり抜けた時の処理を書いていきます。
衝突時の処理はOnTriggerEnter()の中に記述します。
スタート時の処理はStart()の中に書きますよね?
それと同じような感じです。
OnTriggerEnter()はこのように書きます。
void OnTriggerEnter(Collider 変数(当たったオブジェクトが格納される))
{
//当たった時の処理
}
サンプルコード
例としてすり抜けた時に下のオブジェクトを消すコードを書いていきましょう。
コードは下記の通りです。
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 OnTriggerEnter(Collider collider)
{
//当たったオブジェクトを消す
Destroy(collider.gameObject);
}
}
実行結果は、

意図した通りになっていますね!
まとめ
この記事ではunity3dですり抜けた時の処理を実装していきました。
この記事を読んで3dのすり抜けた時のコードが書けるようになったのなら幸いです!