Menu
CoddyTech

Триггерные коллайдеры

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

Коллайдер с установленной галочкой Is Trigger больше не является твёрдым телом: Rigidbody проходят прямо сквозь него, а Unity вместо этого сообщает о пересечении, вызывая OnTriggerEnter в скриптах обоих объектов. Финишные линии, подбираемые предметы и опасные зоны — это триггеры. В коде этот флажок — свойство коллайдера isTrigger.

Зона тревоги в этом хранилище при запуске игры переключает свой коллайдер в режим триггера — это то же самое, что установить галочку, — и включает тревогу, когда охранник входит в зону:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

Для триггеров действует то же правило, что и для столкновений: Unity проверяет пару объектов, только если у одного из них есть Rigidbody. Два объекта без Rigidbody никогда не сообщают о пересечении друг с другом, независимо от того, являются ли они триггерами. Охранники патрулируют с помощью скрипта, поэтому у каждого охранника есть кинематический Rigidbody (Add Component, Rigidbody, установлен флажок Is Kinematic): гравитация и столкновения на него не влияют, но он всё равно считается Rigidbody. Без Rigidbody у охранников охранник проходит сквозь зону, а Console остаётся пустой. Без isTrigger зона представляет собой твёрдый блок, а кинематическое тело никогда не касается коллайдера, у которого нет Rigidbody, поэтому снова ничего не записывается. Достаточно одного Rigidbody в паре — на любом из объектов. В следующем уроке мы рассмотрим other — коллайдер, который вошёл в зону.

challenge icon

Задание

Легко

Дрон должен пролететь по маршруту через три кольца, и каждое кольцо должно выводить в журнал своё имя и passed, когда дрон пролетает через него, например Ring1 passed. Пока ничего не работает: скрипт дрона перемещает его с помощью MovePosition, но в сцене ни у одного объекта нет Rigidbody, а кольца сплошные.

  • В Drone.cs добавь дрону Rigidbody при запуске игры и сохрани его в body. Дрон должен лететь по маршруту горизонтально. Одного Rigidbody на дроне достаточно для всех трёх колец.
  • В Ring.cs сделай коллайдер каждого кольца триггером при запуске игры.

Нажми Play и посмотри на Console, затем нажми Check.

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

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Сделайте коллайдер этого кольца триггером
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}
quiz iconПроверьте себя

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

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