Menu
CoddyTech

トリガーコライダー

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 について学びます。

challenge icon

チャレンジ

簡単

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");
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン