Компоненты коллайдера определяют форму GameObjectосновного объекта в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь для целей физического столкновения. Невидимый коллайдер не обязательно должен иметь ту же форму, что и сетка GameObject Основной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в Словарь. Грубая аппроксимация сетки часто более эффективна и неразличима в игровом процессе.
Простейшими (и наименее требовательными к процессору) коллайдерами являются примитивные типы коллайдеров. В 3D это Box Colliderкомпонент кубического коллайдера, который обрабатывает коллизии для игровых объектов, таких как игральные кости и кубики льда. Подробнее
См. в Словарь, Сферический коллайдерКомпонент коллайдера в форме сферы, обрабатывающий коллизии игровых объектов, таких как мячи или другие предметы, которые можно приблизительно представить как сферу для целей физ. Подробнее
См. в Словарь и Капсульный коллайдерКомпонент коллайдера в форме капсулы, который обрабатывает столкновения для игровых объектов, таких как бочки и конечности персонажей. Подробнее
См. в Словарь. В 2D вы можете использовать 2D-коллайдер и 2D-коллайдер. Вы можете добавить любое их количество к одному игровому объекту, чтобы создать составные коллайдеры.
Составные коллайдеры
Составные коллайдеры приближаются к форме GameObject, сохраняя при этом низкую нагрузку на процессор. Чтобы получить дополнительную гибкость, вы можете добавить дополнительные коллайдеры к дочерним объектам GameObject. Например, вы можете вращать блоки относительно локальных осей родительского игрового объекта. Когда вы создаете такой составной коллайдер, вы должны использовать только один компонент Rigidbody, который позволяет моделировать воздействие гравитации на GameObject. и другие силы. Подробнее
См. в компоненте Словарь, размещенном на корневом GameObject в иерархии.
Примитивные коллайдеры некорректно работают со сдвиговыми преобразованиями. Если вы используете комбинацию поворотов и неравномерных масштабов в иерархии Transform, так что результирующая фигура больше не является примитивной формой, примитивный коллайдер не может правильно представить ее.
Сетевые коллайдеры
Однако в некоторых случаях даже составные коллайдеры недостаточно точны. В 3D вы можете использовать Mesh Colliderкомпонент коллайдера произвольной формы, который принимает ссылку на сетку для определения формы поверхности столкновения. Подробнее
См. в Словарь, чтобы соответствовать форме сетки GameObject точно. В 2D 2D-полигональный коллайдер не соответствует форме спрайтаДвухмерные графические объекты. Если вы привыкли работать в 3D, спрайты — это, по сути, просто стандартные текстуры, но есть специальные приемы комбинирования текстур спрайтов и управления ими для повышения эффективности и удобства во время разработки. Подробнее
смотрите в Словарь рисунок, но вы можете уточнить форму для любого уровня детализацииметод Level Of Detail (LOD) — это оптимизация, треугольников, которые Unity должна отображать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
Посмотрите в Словарь, который вам нравится.
Эти коллайдеры потребляют гораздо больше ресурсов процессора, чем примитивные типы, поэтому используйте их экономно, чтобы поддерживать хорошую производительность. Кроме того, меш-коллайдер не может столкнуться с другим меш-коллайдером (т. е. ничего не происходит, когда они вступают в контакт). В некоторых случаях это можно обойти, пометив коллайдер сетки как Выпуклый в ИнспектореA Unity. окно, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
См. в Словарь. Это создает форму коллайдера в виде «выпуклой оболочки», которая похожа на исходную сетку, но с заполненными поднутрениями.
Преимущество этого заключается в том, что выпуклый коллайдер сетки может сталкиваться с другими коллайдерами сетки, поэтому вы можете использовать эту функцию, когда у вас есть движущийся персонаж с подходящей формой. Однако хорошим правилом является использование коллайдеров сетки для сценыСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Просмотрите в Словарь геометрию и аппроксимируйте форму движущихся игровых объектов с помощью составных примитивных коллайдеров.
Статические коллайдеры
Вы можете добавлять коллайдеры в GameObject без компонента Rigidbody, чтобы создавать полы, стены и другие неподвижные элементы сцены. Они называются статическими коллайдерами. Напротив, коллайдеры на GameObject с Rigidbody называются динамическими коллайдерами. Статические коллайдеры могут взаимодействовать с динамическими коллайдерами, но, поскольку у них нет Rigidbody, они не двигаются в ответ на столкновения.
Материалы по физике
При взаимодействии коллайдеров их поверхности должны имитировать свойства материала, который они должны представлять. Например, лист льда будет скользким, в то время как резиновый мяч будет создавать сильное трение и будет очень упругим. Хотя форма коллайдеров не деформируется во время столкновений, их трение и отскок можно настроить с помощью Physics Materials. Получение правильных параметров может потребовать немного проб и ошибок. Скользкий материал, такой как лед, например, имеет нулевое (или очень низкое) трение. Такой цепкий материал, как резина, обладает высоким коэффициентом трения и почти идеальной упругостью. См. справочные страницы для Physic Material и PhysicsMaterial2D для получения дополнительной информации о доступных параметры. Обратите внимание, что по историческим причинам 3D-ресурс на самом деле называется Физический материалФизический ресурс для настройки эффектов трения и отскока сталкивающихся объектов. . Подробнее
См. в Словарь (без S), но 2D-эквивалент называется Physics Material 2DИспользуйте для регулировки трения и отскока, возникающего между 2D-физическими объектами, когда они сталкиваются Подробнее
См. в Словарь (с буквой S).
Триггеры
Система сценариев может определять возникновение коллизий и инициировать действия с помощью функции OnCollisionEnter
. Однако вы также можете использовать physics engineСистема, которая имитирует аспекты физических систем, чтобы объекты могли правильно ускоряться и подвергаться воздействию столкновений, гравитации и других сил. More info
See in Словарь просто обнаружить, когда один коллайдер входит в пространство другого, не создавая столкновения. Коллайдер, сконфигурированный как Триггер (используя свойство Is Trigger), не ведет себя как твердый объект и просто пропускает другие коллайдеры. Когда коллайдер входит в свое пространство, триггер вызывает функцию OnTriggerEnter
для объекта триггера scriptsФрагмент кода, который позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом More info
See in Словарь.
Коллбэки для скриптов
При возникновении коллизий физический движок вызывает функции с определенными именами для любых скриптов, прикрепленных к задействованным объектам. Вы можете поместить любой код в эти функции, чтобы реагировать на событие столкновения. Например, вы можете воспроизвести звуковой эффект при столкновении автомобиля с препятствием.
При первом обновлении физики при обнаружении столкновения вызывается функция OnCollisionEnter
. Во время обновлений, когда контакт поддерживается, вызывается OnCollisionStay
и, наконец, OnCollisionExit
указывает, что контакт был разорван. Триггерные коллайдеры вызывают аналогичные функции OnTriggerEnter
, OnTriggerStay
и OnTriggerExit
. Обратите внимание, что для 2D-физики существуют эквивалентные функции с добавлением 2D к имени, например, OnCollisionEnter2D
. Полную информацию об этих функциях и примеры кода можно найти на странице Справочник по сценариям для класса MonoBehaviour.
Для обычных столкновений без триггера есть дополнительная деталь: по крайней мере один из вовлеченных объектов должен иметь некинематическое Rigidbody (т. е. параметр Is Kinematic должен быть отключен). Если оба объекта являются кинематическими твердыми телами, то OnCollisionEnter
и т. д. вызываться не будут. В случае столкновений триггеров это ограничение не применяется, поэтому как кинематические, так и некинематические твердые тела будут запрашивать вызов OnTriggerEnter
при входе в коллайдер триггера.
Взаимодействие с коллайдером
Коллайдеры взаимодействуют друг с другом по-разному в зависимости от того, как настроены их компоненты твердого тела. Тремя важными конфигурациями являются Статический коллайдер (т. е. твердое тело вообще не подключено), Жесткий коллайдер и Кинематический твердотельный коллайдер.
Статический коллайдер
Статический коллайдер — это игровой объект, у которого есть коллайдер, но нет Rigidbody. Статические коллайдеры в основном используются для геометрии уровней, которая всегда остается на одном и том же месте и никогда не перемещается. Входящие объекты Rigidbody сталкиваются со статическими коллайдерами, но не перемещают их.
В некоторых случаях физический движок оптимизирует статические коллайдеры, которые никогда не двигаются. Например, транспортное средство, стоящее на вершине статического коллайдера, остается спящим, даже если вы перемещаете этот статический коллайдер. Вы можете включать, отключать или перемещать статические коллайдеры во время выполнения без особого влияния на скорость вычислений физического движка. Кроме того, вы можете безопасно масштабировать статический сетчатый коллайдер, если масштаб является однородным (не перекошенным).
Жесткий коллайдер
Это GameObject с прикрепленным коллайдером и обычным, некинематически твердым телом. Коллайдеры Rigidbody полностью моделируются физическим движком и могут реагировать на столкновения и силы, приложенные из скрипта. Они могут сталкиваться с другими объектами (включая статические коллайдеры) и являются наиболее часто используемой конфигурацией коллайдера в играх, использующих физику.
Кинематический твердотельный коллайдер
Это GameObject с коллайдером и присоединенным к нему кинематически Rigidbody (т. е. свойство IsKinematic Rigidbody включено). Вы можете переместить кинематический объект твердого тела из скрипта, изменив его Компонент преобразованияКомпонент преобразования определяет положение, вращение и масштаб каждый объект в сцене. Каждый GameObject имеет Transform. Подробнее
См. в Словарь, но он не будет реагировать на столкновения и силы, как не- кинематическое твердое тело. Кинематические твердые тела следует использовать для коллайдеров, которые можно время от времени перемещать или отключать/включать, но в остальном они должны вести себя как статические коллайдеры. Примером этого является раздвижная дверь, которая обычно должна действовать как неподвижное физическое препятствие, но при необходимости может быть открыта. В отличие от статического коллайдера, движущееся кинематическое твердое тело оказывает трение на другие объекты и «будит» другие твердые тела при контакте.
Даже в неподвижном состоянии кинематические твердотельные коллайдеры ведут себя иначе, чем статические коллайдеры. Например, если коллайдер настроен как триггер, вам также необходимо добавить к нему твердое тело, чтобы получать события триггера в вашем скрипте. Если вы не хотите, чтобы триггер падал под действием силы тяжести или иным образом подвергался физическому воздействию, вы можете установить свойство IsKinematic для его твердого тела.
Компонент Rigidbody можно переключать между нормальным и кинематическим поведением в любое время с помощью свойства IsKinematic.
Распространенным примером этого является эффект «тряпичной куклы», когда персонаж обычно движется во время анимации, но физически отбрасывается взрывом или сильным столкновением. Каждой конечности персонажа может быть назначен отдельный компонент Rigidbody с включенным по умолчанию IsKinematic. Конечности двигаются в обычном режиме с помощью анимации, пока IsKinematic не будет отключена для всех из них, и они сразу же начнут вести себя как физические объекты. В этот момент сила столкновения или взрыва отправит персонажа в полет с отброшенными конечностями убедительным образом.
Матрица действий при столкновении
При столкновении двух объектов может произойти ряд различных событий сценария в зависимости от конфигурации твердых тел сталкивающихся объектов. На приведенных ниже диаграммах подробно показано, какие функции событий вызываются в зависимости от компонентов, прикрепленных к объектам. Некоторые из комбинаций приводят к тому, что столкновение затрагивает только один из двух объектов, но общее правило заключается в том, что физика не будет применяться к объекту, к которому не подключен компонент Rigidbody.
Происходит обнаружение столкновений, и сообщения отправляются при столкновении | ||||||
---|---|---|---|---|---|---|
Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
Static Collider | Y | |||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | |||||
Static Trigger Collider | ||||||
Rigidbody Trigger Collider | ||||||
Kinematic Rigidbody Trigger Collider |
Триггерные сообщения отправляются при столкновении | ||||||
---|---|---|---|---|---|---|
Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
Static Collider | Y | Y | ||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | Y | Y | |||
Static Trigger Collider | Y | Y | Y | Y | ||
Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
Kinematic Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |