Menu
CoddyTech

Вход и выход

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 20 из 71.

Триггер отправляет ещё два сообщения. OnTriggerExit(Collider other) выполняется один раз на физическом шаге, когда пересечение заканчивается, независимо от того, как именно оно заканчивается. OnTriggerStay(Collider other) выполняется на каждом физическом шаге, пока длится пересечение, по умолчанию 50 раз в секунду, как и FixedUpdate(). Все три метода получают один и тот же 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: толчок применяется один раз за шаг, пока шар находится внутри, и прекращается в тот же момент, когда он покидает поток. У восходящего потока нет Rigidbody, поэтому он должен быть у каждого объекта, попадающего внутрь, а attachedRigidbody здесь никогда не равен null. Чтобы задать величину в секунду внутри OnTriggerStay, умножьте её на Time.deltaTime, которое во время физического шага равно его длительности — 0.02. Для каждого пересечения с одним и тем же коллайдером сначала вызывается OnTriggerEnter, а затем OnTriggerExit.

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;

    // Лампа горит, пока в отсеке что-то находится, и гаснет, когда отсек пуст
}

Все уроки раздела Физика и игровой процесс

Потренируйтесь самостоятельно: Песочница Unity