OnTriggerEnter
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 16/71。
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 を受け取ります。
チャレンジ
簡単料金所のメソッドを修正し、車から料金を徴収しましょう。
- 「プレイ」を押します。Consoleにメソッドに関するエラーが表示されます。
void OnTriggerEnter(Collider other)に変更します。 - メソッド内で、
other.CompareTag("Car")の場合、tollをcollectedに加算し、"Toll: " + collectedをログに出力します。自転車は無料で通過します。
「プレイ」を押します。ConsoleにToll: 3、続いてToll: 6と表示されます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class TollGate : MonoBehaviour
{
public int toll = 3;
int collected;
void OnTriggerEnter(Collision collision)
{
// 車は通行料を支払い、それ以外は無料で通過する
}
}
物理演算とゲームプレイのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド