OnTriggerEnter
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 16/63。
void OnTriggerEnter(Collider other)は、別のコライダーがトリガーと重なり始めた物理ステップで一度実行されます。otherはそのコライダーなので、other.name、other.gameObject、other.CompareTag("Player")で何が入ってきたかがわかります。Unityは両方のオブジェクトのスクリプトでこのメソッドを呼び出します。トリガー側ではotherは侵入してきたオブジェクトで、侵入してきたオブジェクト側ではotherはトリガーです。
このゴールラインはプレイヤーにだけ反応するため、ボールが転がって通過しても何も記録されません。
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log(other.name + " crossed the finish line");
}
}パラメーターはColliderでなければなりません。void OnTriggerEnter(Collision collision)と書いても、C#にとっては通常のメソッドなのでスクリプトはコンパイルされます。Unityはパラメーター自体をチェックし、This message parameter has to be of type: Colliderという内容のScript error: OnTriggerEnterを記録し、このメソッドを呼び出しません。Collisionは、2つの物理ボディが接触点でぶつかるOnCollisionEnterで使います。トリガーには報告する接触がなく、コライダーだけがあるため、Colliderを受け取ります。
チャレンジ
簡単車両はトリガーである料金所のゲートを通過します。車両を動かすDriverスクリプトは完成しています。ゲートのTollGateスクリプトを書きましょう。
Carタグが付いた各車両はtoll(3)を支払います。これをcollectedに加算して合計をログに出力します。最初の車ではToll: 3、次にToll: 6となります。- 自転車など、それ以外のものは無料で通過し、何もログに出力しません。
まず再生を押してください。メソッドに関するスクリプトエラーが、現在の記述のままではすでにコンソールに表示されます。修正してから確認してください。
自分で試してみよう
using UnityEngine;
public class TollGate : MonoBehaviour
{
public int toll = 3;
int collected;
void OnTriggerEnter(Collision collision)
{
// 車は通行料を支払い、それ以外は無料で通過する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。