This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Объект столкновения может использовать несколько геометрических примитивов в качестве формы или одну сложную форму.
Примитивные формы — это Box, Sphere и Capsule. Добавить примитивную форму можно выполнив клик ПКМ на объекте столкновения и выбрав Add Shape:
У бокса есть позиция, вращение и размеры (ширина, высота и глубина):
У сферы есть позиция, вращение и диаметр:
У капсулы есть позиция, вращение, диаметр и высота:
Форма капсулы поддерживается только при использовании 3D физики (настраивается в секции Physics файла game.project).
Сложная форма может быть создана либо из компонента тайловой карты либо из выпуклой формы.
В Defold встроена функция, позволяющая легко генерировать физические формы для источника тайлов, используемого тайловой картой. Руководство по источникам тайлов объясняет как добавлять группы столкновений в источник тайлов и назначать тайлы группе столкновений (пример).
Чтобы добавить столкновение к тайловой карте:
Учтите, что свойство Group не учитывается в таком случае, так как группы столкновений задаются в источнике тайлов соответствующей тайловой карты.
Defold предоставляет возможность создавать выпуклую форму (convex hull shape) из трёх или более точек.
.convexshape
) с помощью внешнего редактора.Формат выпуклой формы использует тот же формат данных, что и все другие файлы Defold — protobuf в текстовом виде. Выпуклая форма задаётся набором точек. В 2D физике точки должны быть указаны в порядке против часовой стрелки. В 3D режиме используется абстрактное облако точек. Пример для 2D:
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
Пример выше описывает четыре угла прямоугольника:
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
Существует несколько внешних инструментов, которые можно использовать для создания форм столкновения:
Объект столкновения и его формы наследуют масштаб игрового объекта. Чтобы отключить это поведение, отключите опция Allow Dynamic Transforms в секции Physics файла game.project. Учтите, что поддерживается только равномерное масштабирование, а также то, что будет применено наименьшее значение масштабирования, если было задано не равномерное масштабирование.
Формы объекта столкновения можно изменять во время выполнения с помощью функции physics.set_shape()
. Пример:
-- установка параметров капсулы
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- установка параметров сферы
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- установка параметров коробки
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
Форма нужного типа с указанным идентификатором должна уже существовать на объекте столкновения.
Формы столкновения в 3D-физике могут поворачиваться вокруг всех осей.
Формы столкновения в 2D физике могут поворачиваться только вокруг оси z. Вращение вокруг осей X или Y выльется в некорректные результаты и его стоит избегать, даже когда происходит вращение на 180 градусов для фактически переворота формы вокруг оси X или Y. Для переворота физической формы рекомендуется использовать physics.set_hlip(url, flip)
и physics.set_vlip(url, flip)
.
Вы можете включить отладку физики, чтобы видеть формы столкновений во время выполнения.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB