Menu
CoddyTech

入る・出る

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

トリガーは、さらに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

チャレンジ

簡単

荷積み場に何かがある間、ランプを点灯させましょう。

  1. int inBay; フィールドを追加します。Start() で、lamp.enabled = false; に設定します。
  2. OnTriggerEnter で、inBay に 1 を加え、lamp.enabled = true; に設定します。
  3. OnTriggerExit で、inBay から 1 を引き、値が 0 のときだけランプを消します。

「プレイ」を押して、木箱を出し入れします。荷積み場が空になるまでランプは点灯したままです。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // ベイ内に何かがある間はlampが点灯し、ベイが空になると消灯する
}

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

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