Вход и выход
Часть раздела Физика и игровой процесс путешествия по 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.
Задание
ЛегкоВключайте лампу, пока в грузовом отсеке что-нибудь есть.
- Добавьте поле
int inBay;. ВStart()установитеlamp.enabled = false;. - В
OnTriggerEnterувеличьтеinBayна 1 и установитеlamp.enabled = true;. - В
OnTriggerExitуменьшитеinBayна 1 и выключайте лампу, только когда значение равно 0.
Нажмите «Играть» и задвигайте ящики в отсек и обратно: лампа остаётся включённой, пока отсек не опустеет. Затем нажмите «Проверить».
Попробуйте сами
using UnityEngine;
public class LoadingBay : MonoBehaviour
{
public Light lamp;
// Лампа горит, пока в отсеке что-то находится, и гаснет, когда отсек пуст
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity