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
Компонент колізії (collision component) може використовувати кілька примітивних форм або одну складну форму.
Примітивні форми — це прямокутний паралелепіпед, сфера та капсула. Щоб додати примітивну форму, клацніть правою кнопкою миші об’єкт колізії та виберіть 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(). Приклад:
-- set capsule shape data
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- set sphere shape data
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- set box shape 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).
Ви можете увімкнути налагодження фізики, щоб бачити форми колізій під час виконання.