トリガーコライダー
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 15/63。
Is Trigger にチェックが入ったコライダーは、もはや固体ではありません。Rigidbody はそのまま通り抜け、代わりに Unity は両方のオブジェクトのスクリプトで OnTriggerEnter を呼び出して、重なりを通知します。ゴールライン、アイテム、危険地帯にはトリガーを使います。コードでは、このチェックボックスはコライダーの isTrigger プロパティに相当します。
この保管庫の警報ゾーンは、ゲーム開始時にコライダーをトリガーに切り替えます。これはチェックボックスにチェックを入れるのと同じことで、警備員が中に入ると警報を鳴らします。
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}トリガーにも衝突と同じルールが適用されます。2つのオブジェクトのうち少なくとも一方に Rigidbody がある場合に限り、Unity はそのペアをチェックします。Rigidbody を持たない2つのオブジェクトは、トリガーかどうかにかかわらず、互いを検知することはありません。警備員はスクリプトで巡回するため、それぞれにキネマティック Rigidbody(Add Component、Rigidbody、Is Kinematic にチェック)を付けます。重力や衝突の影響を受けず、それでも Rigidbody として扱われます。警備員に Rigidbody がないと、警備員はゾーンを通り抜け、Console は空のままです。isTrigger がないと、ゾーンは固体のボックスになり、キネマティックなボディは Rigidbody のないコライダーに接触しないため、やはり何も記録されません。ペアのどちらか一方に Rigidbody があれば十分です。次のレッスンでは、中に入ってきたコライダーである other について学びます。
チャレンジ
簡単Droneは3つのリングを通るルートを飛行し、各Ringは、ドローンが通過すると名前とpassedをログに出力する必要があります。たとえば、Ring1 passedのようにします。まだ何も機能していません。ドローンのスクリプトはMovePositionでドローンを飛行させていますが、シーン内にはRigidbodyがなく、リングは通り抜けられません。
Drone.csで、ゲーム開始時にドローンにRigidbodyを追加し、それをbodyに保持してください。ドローンはルートに沿って水平に飛行する必要があります。ドローンに1つのRigidbodyを追加すれば、3つのリングすべてに対応できます。Ring.csで、ゲーム開始時に各リングのコライダーをトリガーにしてください。
Playを押してConsoleを確認し、次にCheckを押してください。
自分で試してみよう
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// このリングのコライダーをトリガーにする
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。