イベントの発生を検知するための
『トリガー』の設定方法
「トリガー」と「当たり判定」は非常に似ているので、
混同して使ってしまいがちです。
この記事を読んで、しっかりと使い分けられるようにしましょう。
「当たり判定」の設定を知りたい方
⇒『当たり判定』の設定方法を詳しく解説!
「当たり判定」と「トリガー」の違いを詳しく知りたい方
⇒『Collider』をマスター!
『トリガー』とは
「トリガー」とは「引き金」という意味があり、何かが起きる「引き金」となることを、
ゲーム内でもそのまま「トリガー」という言い方をします。
少しわかりにくいですが、
「当たり判定」の場合には “物理的接触”があって、
それをきっかけに何かしらの処理が行われるわけですが、
“物理的接触がない”場合でも、何かしらの処理を行いたいことってありますよね。
例えば、プレイヤーが家の前に来た時にイベントが発生するといった場合や、
レースゲームなどでゴールに到達したときにゲーム終了処理を行うといったように、
“物理的接触はない”が何かしらの処理を行いたい場合に「トリガー」が使われます。
“物理的な接触が発生しない”のが「トリガー」の特徴になります。
『トリガー』が発生する条件
では、「トリガー」を発生させるための条件を説明します。
接触する2つのオブジェクトにおいて、
・少なくとも一方にRigidbody(あるいはRigidbody2D)がアタッチされていること
・両方にCollider(例えばBoxColliderやBoxCollider2D)がアタッチされていること
・少なくとも一方のColliderの『Is Trigger』がtrue(チェックあり)であること
この3点が必須条件になります。
『当たり判定』では、Colliderの両方の「Is Trigger」がfalseでないといけないのに対し、
『トリガー』では、少なくとも一方の「Is Trigger」がtrueでないといけません。
『トリガー』発生時の処理
トリガーとの接触が発生したときに何かしら実行したい場合には、
スクリプトに、以下のコードを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// 2Dの場合のトリガー判定 private void OnTriggerEnter2D(Collider2D collision) { // 物体がトリガーに接触しとき、1度だけ呼ばれる } private void OnTriggerStay2D(Collider2D collision) { // 物体がトリガーに接触している間、常に呼ばれる } private void OnTriggerExit2D(Collider2D collision) { // 物体がトリガーと離れたとき、1度だけ呼ばれる } // 3Dの場合のトリガー判定 private void OnTriggerEnter(Collider collision) { // 物体がトリガーに接触しとき、1度だけ呼ばれる } private void OnTriggerStay(Collider collision) { // 物体がトリガーに接触している間、常に呼ばれる } private void OnTriggerExit(Collider collision) { // 物体がトリガーと離れたとき、1度だけ呼ばれる } |
上記を参考に、必要な関数と処理を書いて、
トリガーの判定を行うオブジェクトにアタッチしてください。
「当たり判定」と似ていますが、関数名と引数が違っているので注意しましょう。
『トリガー』設定のまとめ
「トリガー」を発生させる条件は、
・少なくとも一方にRigidbody(あるいはRigidbody2D)がアタッチされていること
・両方にCollider(例えばBoxColliderやBoxCollider2D)がアタッチされていること
・少なくとも一方のColliderの『Is Trigger』がtrue(チェックあり)であること
「トリガー」発生時に呼び出される関数は、
OnTriggerEnterのように関数名にTriggerが入ったものになります。
「当たり判定」と「トリガー」の違いは、
「Colliderの『Is Trigger』のチェックの有無」と「使用する関数名の違い」。
この2点をしっかりと理解し混同してしまわないように注意しましょう。
「当たり判定」についての記事
⇒『当たり判定』の設定方法を詳しく解説!
以上で、『トリガー』の設定方法を詳しく解説!の説明を終わります。