Menu
CoddyTech

OnTriggerEnter

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

void OnTriggerEnter(Collider other) выполняется один раз на физическом шаге, когда другой коллайдер начинает перекрывать триггер. other — это тот коллайдер, поэтому other.name, other.gameObject и other.CompareTag("Player") сообщают тебе, что вошло в триггер. Unity вызывает этот метод в скриптах обоих объектов: у триггера other — это объект, который в него вошёл, а у этого объекта other — это триггер.

Эта финишная линия реагирует только на игрока, поэтому шар, который прокатывается через неё, ничего не выводит в журнал:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log(other.name + " crossed the finish line");
    }
}

Параметр должен иметь тип Collider. Если написать void OnTriggerEnter(Collision collision), скрипт всё равно скомпилируется, потому что для C# это обычный метод. Unity проверяет сам параметр, выводит ошибку Script error: OnTriggerEnter с сообщением This message parameter has to be of type: Collider и никогда не вызывает этот метод. Collision используется в OnCollisionEnter, когда два твёрдых тела соприкасаются в точке контакта. У триггера нет контакта, о котором нужно сообщать, есть только коллайдер, поэтому он получает Collider.

challenge icon

Задание

Легко

Транспортные средства проезжают через Gate — триггер. Скрипт Driver перемещает их и уже готов. Напиши скрипт TollGate для ворот:

  • Каждое транспортное средство с тегом Car платит toll (3): добавь эту сумму к collected и выведи общий итог в лог: Toll: 3 для первой машины, затем Toll: 6.
  • Всё остальное, например Cyclist, проезжает бесплатно, и в лог ничего не выводится.

Сначала нажми Play: в Console уже отображается ошибка скрипта, связанная с тем, как записан метод. Исправь её, затем нажми Check.

Попробуйте сами

using UnityEngine;

public class TollGate : MonoBehaviour
{
    public int toll = 3;
    int collected;

    void OnTriggerEnter(Collision collision)
    {
        // Автомобили платят за проезд; всё остальное проезжает бесплатно
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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