Read this manual in English
Объекты столкновения
Объект столкновения — это компонент, применяемый для придания игровому объекту физического поведения. Объект столкновения обладает физическими свойствами, такими, как вес, трение и форма, при этом его пространственные пределы задаются одной или несколькими формами, которые присоединяются к компоненту. Defold поддерживает следующие типы объектов столкновений:
- Статические объекты
- Статические объекты никогда не двигаются, однако динамический объект, столкнувшийся со статическим объектом отреагирует отпрыгиванием и/или проскальзыванием. Статические объекты весьма полезны для выстраивания неподвижной геометрии уровней (то есть земли и стен). Также они дешевле чем динамические объекты с точки зрения производительности. Невозможно перемещать или как-либо изменять статические объекты.
- Динамические объекты
- Динамические объекты симулируются физическим движком. Движок определяет все столкновения и применяет результирующие силы. Динамические объекты хороши для объектов, которые должны вести себя реалистично, но нет возможности напрямую управлять позицией и ориентаций динамического объекта. Единственный способ — влиять на них косвенно, применяя силы или меняя угловое затухание и скорость, а также линейное затухание и угловую скорость.
- Кинематические объекты
- Кинематические объекты только регистрируют столкновения с другими физическими объектами, но физический движок не производит никаких автоматических симуляций. Решение о разрешении столкновений, либо их игнорировании, остается за вами ([узнайте больше здесь])(/ru/manuals/physics-resolving-collisions). Кинематические объекты весьма хороши для игрового персонажа или для объектов, управляемых скриптами, которые требуют тонкого контроля над физическими реакциями, как например игровой персонаж.
- Триггеры
- Триггеры — это объекты, которые регистрируют простые столкновения. Триггеры — это облегченные версии объектов столкновения. Они схожи с проекционными лучами тем, что они считывают физический мир в противовес взаимодействия с ним. Они хороши для объектов, которые просто регистрируют попадание (как например пуля) или как часть игровой логики, где вы хотите активировать особые действия, когда объект достигает специальной точки. Триггеры вычислительно дешевле, чем кинематические объекты и предпочтительнее применять их вместо кинематических объектов, если это возможно.
Добавление компонента Collision Object
Объект столкновений обладает набором свойств, которые определяют его тип и физические параметры. Также он содержит одну или более форм, которые всецело задают форму физического объекта.
Для добавления объекта столкновения в игровой объект:
- В представлении Outline сделайте клик ПКМ на игровом объекте и выберите Add Component ▸ Collision Object из контекстного меню. Это создаст новый компонент без какой-либо формы.
- Сделайте клик ПКМ на новом компонент и выберите Add Shape ▸ Box / Capsule / Sphere. Это добавит новую форму к компоненту Collision Object. Можно добавить любое количество форм компоненту. Также можно использовать тайловую карту или выпуклую оболочку (convex hull) для задания формы физического объекта.
- Используйте инструменты перемещения, поворота и масштабирования для редактирования форм.
- Выберите компонент в представлении Outline и отредактируйте свойства объекта столкновения.
Добавление формы столкновения
Объект столкновения может либо использовать несколько геометрических примитивов в качестве формы либо одну сложную форму. За подробностями о различных формах и о том, как их добавлять к объекту столкновения, обращайтесь к руководству по формам столкновений.
Свойства объекта столкновения
- Id
- Идентификатор компонента.
- Collision Shape
- Это свойство используется для геометрии из тайловой карты или выпуклых форм, не задействуя геометрические примитивы. За подробностями обращайтесь к руководству по формам столкновения.
- Type
- Тип объекта столкновений:
Dynamic
, Kinematic
, Static
или Trigger
. Если объект выставлен как динамический, необходимо установить свойство Mass в ненулевое значение. Для динамических или статических объектов также требуется проверить, что значения Friction и Restitution также выставлены в приемлемые значения под используемый сценарий.
- Friction
- Трение позволяет объектам скользить реалистично относительно друг друга. Значение трения обычно выставляется между
0
(совсем нет трения — очень скользящий объект) и 1
(сильное трение — абразивный объект). Однако, любое положительное значение будет валидны.
Сила трения пропорциональна нормальной силе (normal force; это называется кулоновским трением). Когда сила трения вычисляется между двумя формами (A
и B
), значения трения обоих объектов комбинируются в геометрическое среднее:
\[F = sqrt( F_A * F_B )\]
Это означает, что если один из объектов имеет нулевое трение, то контакт между ними будет иметь нулевое трение.
- Restitution
- Значение реституции задает “прыгучесть” объекта. Значение варьируется как правило между 0 (неэластичное столкновение — объект вообще не отскакивает) и 1 (идеальное эластичное столкновение — скорость объекта будет целиком отражена в отскакивании)
Значения реституции между двумя формами (A
и B
) комбинируются по следующей формуле:
\[R = max( R_A, R_B )\]
Когда форма имеет множественные контакты, реституция симулируется аппроксимировано, потому что Box2D использует пошаговый решатель. Также Box2D использует неэластичные столкновения когда скорость столкновения мала, чтобы исключить дрожание отскока.
- Linear damping
- Линейное затухание сокращает линейную скорость тела. Оно отличается от трения, которое возникает только во время контакта, и может применяться, чтобы придать объектам плавное поведение, будто они движутся через что-то более плотное чем просто воздух. Валидные значения находятся в диапазоне от 0 до 1.
Box2D аппроксимирует затухание для стабильности и производительности. На маленьких значениях, эффект затухания не зависит от временного шага, в то время, как на больших значениях, эффект затухания варьируется с временным шагом. Если вы запускаете свою игру с фиксированным временным шагом, никаких проблем возникнуть не должно.
- Angular damping
- Угловое затухание работает также как и линейное затухание, но оно сокращает угловую скорость тела. Валидные значения находятся в диапазоне от 0 до 1.
- Locked rotation
- Выставление этого свойства полностью выключает вращение на объекте столкновения, не важно, какие силы применяются к нему.
- Group
- Имя группы столкновения, к которому должен принадлежать объект. Можно иметь 16 разных групп и можно именовать их под свои нужды в игре. К примеру, “players”, “bullets”, “enemies” и “world”. Если для формы столкновения задана тайловая карта, это поле не используется, а имена групп берутся из источника тайлов. Подробнее о группах столкновения.
- Mask
- Другие группы, с которыми должен сталкиваться данный объект. Можно назвать одну группу или задать множество групп, разделяя их в списке запятой. Если оставить поле Mask пустым, объект не будет ни с чем иметь столкновений. Подробнее о группах столкновения.
Свойства, доступные в среде исполнения
Физический объект имеет различные свойства, которые могут быть считаны и изменены посредством go.get()
и go.set()
:
angular_damping
- Значение углового затухания для объекта столкновения (
number
). Справочник API.
angular_velocity
- Текущая угловая скорость объекта столкновения (
vector3
). Справочник API.
linear_damping
- Значение линейного затухания для объекта столкновения (
number
). Справочник API.
linear_velocity
- Текущая линейная скорость объекта столкновения (
vector3
). Справочник API.
mass
- Определенная физическая масса объекта столкновения (
number
). Справочник API.