Menu
CoddyTech

トリガーコライダー

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 15/71。

「Is Trigger」にチェックを入れたコライダーは、もはや固体ではありません。Rigidbodyはそのまま通り抜け、代わりにUnityは、両方のオブジェクトのスクリプトでOnTriggerEnterを呼び出して、重なりを通知します。ゴールライン、アイテム、危険地帯にはトリガーを使います。コードでは、このチェックボックスはコライダーのisTriggerプロパティにあたります。

この金庫室の警報ゾーンは、ゲーム開始時にコライダーをトリガーに切り替えます。これはチェックボックスにチェックを入れるのと同じで、警備員が中に入ると警報を鳴らします。

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

トリガーにも衝突と同じルールが適用されます。Unityが2つのオブジェクトの組み合わせを調べるのは、少なくとも一方にRigidbodyがある場合だけです。Rigidbodyのない2つのオブジェクトは、トリガーかどうかにかかわらず、互いを検知しません。警備員はスクリプトで巡回するため、各警備員にはキネマティックRigidbody(「コンポーネントを追加」からRigidbodyを追加し、「Is Kinematic」にチェックを入れる)を付けます。これにより、重力や衝突の影響を受けなくなり、それでもRigidbodyとして扱われます。警備員にRigidbodyがなければ、警備員はゾーンを通り抜け、コンソールには何も表示されません。isTriggerがなければ、ゾーンは固体の箱です。また、キネマティックボディはRigidbodyのないコライダーには決して接触しないため、この場合も何も記録されません。組み合わせのどちらか一方のオブジェクトにRigidbodyがあれば十分です。次のレッスンでは、侵入してきたコライダーであるotherについて学びます。

challenge icon

チャレンジ

簡単

ドローンをリングの中を通過させ、各リングからドローンを報告させましょう。

  1. Drone.csのStart()で、body = gameObject.AddComponent<Rigidbody>();とbody.isKinematic = true;を設定し、水平に飛ぶようにします。
  2. Ring.csのStart()で、GetComponent<Collider>().isTrigger = true;を設定します。

「プレイ」を押すと、ドローンが通過し、ConsoleにRing1 passed、Ring2 passed、Ring3 passedと表示されます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // このリングのコライダーをトリガーにする
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}

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

自分で練習してみよう: Unityプレイグラウンド