Какой метод использовать между OnCollision и OnTrigger иногда может быть трудным решением. Особенно при первом взгляде. Однако на самом деле это не обязательно.

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

После этого решите, какой тип столкновения вы хотите получить. Столкновение с твердой поверхностью, триггерное или сквозное столкновение. По сути, это сводится к тому, хотите ли вы, чтобы применялись физические свойства или физика, например, сила или какая-то отдача, когда вы ударяете или получаете удар от объекта? Если вы хотите, чтобы какая-то физика или объекты двигались по OnCollision при вызове события, тогда OnCollision — это то, что вам нужно, наряду с обычным коллайдером. Это хорошо для сбоев, различных типов разрушаемых свойств и поведения, рикошетов, вещей, которые вы хотите, чтобы реагировали на столкновение. Для них вам нужно столкновение с твердой поверхностью или событие OnCollisionEnter().

Имейте в виду, что при создании 2.5D-игры столкновение с твердой поверхностью может нанести ущерб вашему игровому процессу. Это может вызвать нежелательное поведение и выбить объекты и персонажей из вашего иллюзорного 2D-поля игры.

Чтобы исправить это, вы можете использовать ограничения на преобразования объектов либо через код, либо через сам компонент твердого тела.

Это упрощает использование столкновений твердых поверхностей в 2.5D-игре, однако, в любом случае, их действительно следует использовать экономно в любом случае. Столкновения с твердыми поверхностями очень трудоемки и потребляют много вычислительной мощности, что может привести к задержке или другим проблемам с производительностью. Особенно при работе с большим количеством объектов и столкновений. Однако результат лучше для 2.5D-игры с ограничениями. В этом примере я добавил его в окно проигрывателя, и, как вы можете видеть, он не выходит за рамки 2D-плоскости, на которой я играю, потому что я заморозил его вращение через компонент твердого тела. Остальные я не делал, просто чтобы показать разницу.

Теперь, если вы просто хотите пройти через объект при вызове события, вам нужно использовать OnTrigger. Это отлично подходит для таких вещей, как предметы коллекционирования или бонусы. Вы не хотите, чтобы сбор объекта замедлял движение ваших игроков и нарушал поток и погружение в игру. Представьте, если бы Марио останавливался или замедлялся каждый раз, когда натыкался на монетку. Игра была бы не такой веселой. Они использовали триггерный коллайдер, чтобы вы могли пройти сквозь него, но при этом иметь возможность поднять его. Убедитесь, что если вы хотите использовать это, вы установите флажок Is Trigger на вашем коллайдере.

В этом примере я просто добавил триггерные коллайдеры и событие OnTrigger для уничтожения этого объекта OnTrigger(), и у игрока есть система здоровья, поэтому, когда он сталкивается с тремя другими объектами, он уничтожается.

В нем нет и не требуется никакой физики или столкновений с твердыми поверхностями, поэтому я использовал OnTrigger. Вы можете использовать ту же концепцию для бонусов, как я уже говорил. Бегите прямо через него и создайте иллюзию, что подбираете его. Затем вызовите свое событие в методе OnTrigger.

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

Помимо этого, лучший способ определить, какой из них использовать, основан на физике. Вы хотите, чтобы он воздействовал на другой объект физически или нет? Если да, используйте OnCollision, если нет — триггер. Существует также множество различных методов для определения того, когда вызывать событие внутри любого из них. Они находятся на входе, пребывании и выходе. Это помогает разбить и запустить серию событий для любого метода в определенное время.

В любом случае, это базовый ускоренный курс о том, какой метод использовать, OnCollision() или OnTrigger(), а также о нескольких событиях и обстоятельствах, когда вы можете захотеть их использовать. Спасибо за прочтение=).