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 object) може містити кілька вбудованих форм. У 3D-фізиці до них можуть належати оболонки й трикутні сітки з файлів glTF або GLB. Також можна використати ресурс карти плиток або опуклої форми через властивість Collision Shape об’єкта колізії.
Примітивні форми — це прямокутний паралелепіпед, сфера та капсула. Щоб додати примітивну форму, клацніть правою кнопкою миші об’єкт колізії та виберіть Add Shape:

Прямокутний паралелепіпед має позицію, поворот і розміри (ширину, висоту та глибину):

Сфера має позицію, поворот і діаметр:

Капсула має позицію, поворот, діаметр і висоту:

Форми капсули підтримуються лише під час використання 3D-фізики (налаштовується в розділі Physics файлу game.project).
Складні форми можуть використовувати геометрію карти плиток або дані опуклої оболонки. Починаючи з Defold 1.13.2, об’єкти колізій у 3D також можуть створювати оболонки й форми трикутних сіток із сіток у сценах glTF або GLB.
Використовуйте форму Hull для опуклого наближення сітки або форму Mesh, коли колізії мають відповідати її трикутникам, зокрема увігнутим ділянкам, як-от отворам у геометрії рівня.
3D.Вибрана сітка надає локальну геометрію; трансформації вузлів glTF не застосовуються. Форми колізій Mesh підтримуються бекендом Bullet 3D, зокрема для статичних і нестатичних об’єктів колізій. Бекенди 2D-фізики їх не підтримують.
Через API форм під час виконання геометрія трикутної сітки доступна лише для читання. Щоб змінити її трикутники, відредагуйте вихідну сітку й виконайте збирання знову. Про масштаб ігрового об’єкта дивіться в розділі Масштабування форм колізій.
Defold містить функцію, яка дає змогу легко генерувати фізичні форми для джерела плиток, що використовується картою плиток. У посібнику з джерел плиток пояснено, як додавати групи колізій до джерела плиток і призначати плитки групам колізій (приклад).
Щоб додати колізії до карти плиток:

Зауважте, що властивість Group тут не використовується, оскільки групи колізій визначено в джерелі плиток карти плиток.
У 3D-фізиці можна створити оболонку безпосередньо із сітки за допомогою описаного вище процесу в редакторі. Застарілий ресурс .convexshape також підтримується; його можна створити з точок у зовнішньому редакторі:
.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).
Ви можете увімкнути налагодження фізики, щоб бачити форми колізій під час виконання.