Menu
CoddyTech

進入と退出

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

トリガーはさらに2種類のメッセージを送ります。OnTriggerExit(Collider other)は、重なりが終了した物理ステップで、その終了の仕方にかかわらず1回実行されます。OnTriggerStay(Collider other)は、重なりが続いている間、デフォルトでは1秒間に50回、FixedUpdate()と同じように、物理ステップごとに実行されます。3つとも同じColliderを受け取ります。

この上昇気流は、中に浮かんでいるものを持ち上げ、出ていったときに通知します。

public float lift = 15f;

void OnTriggerStay(Collider other)
{
    other.attachedRigidbody.AddForce(Vector3.up * lift);
}

void OnTriggerExit(Collider other)
{
    Debug.Log(other.name + " left the updraft");
}

力は物理ステップ内で加えるものなので、OnTriggerStayが適しています。ボールが中にある間はステップごとに1回押し上げ、ボールが出た瞬間に止まります。上昇気流にはRigidbodyがないため、訪れるオブジェクトはすべてRigidbodyを持っている必要があり、ここでattachedRigidbodyがnullになることはありません。OnTriggerStay内で1秒あたりの量を指定する場合は、Time.deltaTimeを掛けます。物理ステップ中のこの値はステップの長さで、0.02です。オブジェクトが入るたびにOnTriggerEnterが1回呼び出され、その後、同じコライダーに対してOnTriggerExitが1回呼び出されます。

challenge icon

チャレンジ

簡単

倉庫の床に描かれた黄色いBayはトリガーで、lampはその隣の柱にある警告灯です。ベイに何かがあるかどうかをランプで示すように、LoadingBayを書きましょう。

  • ゲーム開始時、ベイは空なので、ランプは消灯しています(lamp.enabled = false)。
  • ベイに少なくとも1つのオブジェクトがある間、ランプは点灯します。
  • 最後のオブジェクトが出ていくと、ランプは再び消灯します。

クレート2個とプレイヤーは同時にベイに入ることがあるため、1つが出ていってもベイが空になったとは限りません。Playを押して、矢印キーでクレートを出し入れし、次にCheckを押しましょう。

自分で試してみよう

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // ベイ内に何かがある間はランプが点灯し、ベイが空になると消灯する
}
quiz icon腕試し

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

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