Столкновения в Unity требуют двух вещей: оба объекта должны иметь коллизию и чтобы по крайней мере один из объектов имел твердое тело.

Когда такие два объекта сталкиваются, объект с твердым телом ведет себя так, как вы ожидаете от физического объекта, в то время как объект без твердого тела считается статичным и остается на месте. Кроме того, Unity генерирует события при возникновении коллизий, которые можно подключить с помощью сценариев.

Выше показана матрица столкновений Unity, показывающая, когда обнаруживаются триггерные события и события столкновений, и на которые можно реагировать внутри скрипта.

Триггерные события требуют, чтобы для одного или обоих объектов был установлен флажок «Является триггером».

Выше показана обработка столкновений для врага в простом двухмерном космическом аркадном шутере. Используя систему тегов Unity для определения того, с чем столкнулся противник, он может соответствующим образом реагировать на событие столкновения. Враги — единственные объекты с твердым телом, и все коллайдеры настроены на триггеры.

Но что, если я перейду к твердым телам как на лазерах, так и на врагах, и сниму флажок «Срабатывает ли триггер»?

Теперь враги и лазеры просто сбиваются с курса!?

Поскольку скрипт по-прежнему подключен только для запуска коллизий, это легко исправить.

Обратите внимание на изменение типа Collision вместо типа Collider, который содержит информацию о самом столкновении.

Теперь игра ведет себя так же, как и изначально, но добавление дополнительных твердых тел в игру только замедлит ее в вычислительном отношении, даже если твердые тела не используются для имитации какого-либо движения.