Manuals
Manuals




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

Щоб додати колізії до карти плиток:

  1. Додайте карту плиток до ігрового об’єкта (game object): клацніть правою кнопкою миші ігровий об’єкт і виберіть Add Component File. Виберіть файл карти плиток.
  2. Додайте компонент об’єкта колізії до ігрового об’єкта: клацніть правою кнопкою миші ігровий об’єкт і виберіть Add Component ▸ Collision Object.
  3. Замість додавання форм до компонента задайте файл карти плиток у властивості Collision Shape.
  4. Налаштуйте Properties компонента об’єкта колізії як зазвичай.

Колізії джерела плиток

Зауважте, що властивість Group тут не використовується, оскільки групи колізій визначено в джерелі плиток карти плиток.

Форма опуклої оболонки

Defold містить функцію, яка дає змогу створити форму опуклої оболонки (convex hull shape) із трьох або більше точок.

  1. Створіть файл форми опуклої оболонки (розширення файлу .convexshape) за допомогою зовнішнього редактора.
  2. Відредагуйте файл вручну за допомогою текстового редактора або зовнішнього інструмента (див. нижче)
  3. Замість додавання форм до компонента об’єкта колізії задайте файл опуклої форми у властивості Collision Shape.

Формат файлу

Формат файлу опуклої оболонки використовує той самий формат даних, що й усі інші файли 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

Зовнішні інструменти

Для створення форм колізій можна використовувати різні зовнішні інструменти:

  • Physics Editor від CodeAndWeb можна використовувати для створення ігрових об’єктів зі спрайтами та відповідними формами колізій.
  • Defold Polygon Editor можна використовувати для створення форм опуклої оболонки.
  • Physics Body Editor можна використовувати для створення форм опуклої оболонки.

Масштабування форм колізій

Об’єкт колізії та його форми успадковують масштаб ігрового об’єкта. Щоб вимкнути цю поведінку, зніміть прапорець 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-фізиці

Форми колізій у 3D-фізиці можна повертати навколо всіх осей.

Повертання форм колізій у 2D-фізиці

Форми колізій у 2D-фізиці можна повертати лише навколо осі z. Повертання навколо осі x або y дасть неправильні результати, і його слід уникати навіть у разі повертання на 180 градусів, щоб фактично віддзеркалити форму вздовж осі x або y. Для віддзеркалення фізичної форми рекомендовано використовувати physics.set_hlip(url, flip) і physics.set_vlip(url, flip).

Налагодження

Ви можете увімкнути налагодження фізики, щоб бачити форми колізій під час виконання.