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.
Задание
ЛегкоТранспортные средства проезжают через 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)
{
// Автомобили платят за проезд; всё остальное проезжает бесплатно
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора