Введение в типы коллайдеров
Тип коллайдера определяет, как он взаимодействует с другими коллайдерами, на основе конфигурации коллайдера GameObject и компонентов физического тела.
Документация Unity относится к следующим типам коллайдеров:
- Статические коллайдеры: GameObject имеет коллайдер, но не физическое тело (Rigidbody или ArticulationBody).
- Коллайдеры физических тел: GameObject имеет коллайдер и физическое тело.
- Динамические коллайдеры: Физическое тело GameObject является динамическим (то есть, у него отключено Кинематическое).
- Кинематическая Rigidbody коллайдеров: GameObject’s Rigidbody является кинематическим (т.е. имеет Кинематическое (включено) ArticulationBody не может быть кинематическим.
Для подробностей о том, как взаимодействуют различные типы коллайдеров, см. Взаимодействие между типами коллайдеров.
Статические коллайдеры
Статический коллайдер — это коллайдер, который не имеет ассоциированных Rigidbody или ArticulationBody (то есть, нет Rigidbody или ArticulationBody на ассоциированном GameObject), и поэтому не реагирует на симуляционные физические силы. Другие коллайдеры могут столкнуться со Статическими коллайдерами, но Статические коллайдеры не двигаются в ответ на столкновения.
Используйте Статические коллайдеры для геометрии, которая всегда остается на одном месте и никогда не перемещается (например, полы, стены и другие неподвижные элементы Scene).
Единственный способ переместить статический коллайдер во время выполнения — через Transform. Однако в большинстве случаев так делать не стоит. Физическая система не может сразу учесть перемещение через Transform при расчёте физики, и вы можете столкнуться с непредвиденными побочными эффектами. Статические коллайдеры следует использовать только для геометрии столкновений, которая во время выполнения не перемещается. Если нужен коллайдер, который не реагирует на физические силы, но может перемещаться так, чтобы физическая система это обнаружила и учла, используйте коллайдер с кинематическим физическим телом.
Поскольку статические коллайдеры не рассчитаны на перемещение или временное существование, физическая система не пересчитывает и не пробуждает физические тела в ответ на их движение или исчезновение. Например: если поставить машину (с физическим телом и Wheel Collider) на статический коллайдер, колёсные коллайдеры обнаружат его и обопрутся на него. Через несколько кадров без ввода физическое тело и коллайдеры машины уснут. Если статический коллайдер сдвинется, вы, вероятно, ожидаете, что машина поедет вместе с ним или упадёт. Однако физическая система не пробуждает физическое тело машины в ответ на движение статического коллайдера, поэтому машина останется на месте.
Коллайдеры
Коллайдер физических тел — это коллайдер на том же GameObject, что и физическое тело (Rigidbody или ArticulationBody). Коллайдеры физических тел включены в физические расчеты, но ведут себя по-разному в зависимости от того, являются ли они динамическими или кинематическими (то есть, отключено или включено Кинематическое).
Rigidbody может быть либо динамическим, либо кинематическим. ArticulationBody может быть только динамическим; он не может быть кинематическим.
Динамические коллайдеры
Динамический коллайдер — это коллайдер, находящийся на том же GameObject, что и динамическое физическое тело. Динамические коллайдеры реагируют на смоделированные физические силы. Они могут сталкиваться с другими объектами (в том числе со статическими коллайдерами), а другие коллайдеры могут их перемещать или прикладывать к ним силу.
Используйте динамические коллайдеры для любого GameObject, который вы хотите, чтобы физическая система включила в физические расчеты и двигалась через физические силы.
Коллайдеры физических тел по умолчанию динамические.
Кинематические коллайдеры
Кинематический коллайдер — это коллайдер на том же GameObject, что и кинематический Rigidbody. ArticulationBody не может быть кинематическим.
Как и статические коллайдеры, кинематические коллайдеры не реагируют на смоделированные физические силы. Другие коллайдеры могут с ними сталкиваться, но сами кинематические коллайдеры от столкновений не смещаются.
В отличие от статического коллайдера, кинематический коллайдер физическая система может учитывать в расчётах. Кинематические коллайдеры могут:
- Выводить другие коллайдеры из состояния сна при контакте
- Действуют в качестве триггерный коллайдер, и получать триггеры от других коллайдеров
- Применение трения к другим коллайдерам
Кинематические коллайдеры подходят там, где коллайдер большую часть времени ведёт себя как статический, но иногда должен перемещаться, — например, для раздвижной двери, которая обычно служит неподвижным препятствием, но при необходимости открывается.
Вы можете использовать Rigidbody.isKinematic для переключения коллайдера Rigidbody между динамическим и кинематическим с помощью скрипта по мере необходимости во время выполнения. Это может быть полезным способом управления производительностью коллайдеров, которые не всегда должны быть динамическими. Например, обычным случаем использования для переключения типов коллайдеров является создание эффекта "пуховой куклы", где персонаж обычно движется под анимацией, но физически реагирует на сильное столкновение. Ладони персонажа могут быть кинематическими по умолчанию и двигаться через анимацию, но определенный коллайдер может вызвать Rigidbody для отключения IsKinematic, так что конечности являются динамическими и ведут себя как физические объекты.
Collider взаимодействия
Коллайдеры разных типов (статические, кинематические и динамические) взаимодействуют по-разному в зависимости от конфигурации каждой пары. Подробнее см. Collider взаимодействия.