Система Регдолл

Вступ

Починаючи з версії 3.1, Godot підтримує фізику ragdoll. Ragdolls покладаються на симуляцію фізики для створення реалістичної процедурної анімації. Вони використовуються для анімації смерті в багатьох іграх.

У цьому підручнику ми будемо використовувати демонстрацію Platformer3D, щоб налаштувати ragdoll.

Примітка

Ви можете завантажити демоверсію Platformer3D на GitHub або за допомогою Бібліотеки ресурсів.

Налаштування регдолла

Створення фізичних кісток

Як і багато інших функцій механізму, існує вузол для налаштування ragdoll: вузол PhysicalBone3D. Щоб спростити налаштування, ви можете створити вузли PhysicalBone за допомогою функції «Створити фізичний скелет» у вузлі скелета.

Відкрийте демонстрацію платформера в Godot, а потім сцену Robi. Виберіть вузол Skeleton. У меню верхньої панелі з’явиться кнопка-скелет:

../../_images/ragdoll_menu.png

Клацніть його та виберіть опцію Створити фізичний скелет. Godot створить вузли PhysicalBone і форми зіткнень для кожної кістки в скелеті та штифтових суглобах, щоб з’єднати їх разом:

../../_images/ragdoll_bones.png

Деякі зі згенерованих кісток не потрібні: наприклад, кістка MASTER. Отже, ми збираємося очистити скелет, видаливши їх.

Очищення скелета

Кожна PhysicalBone, яку двигун повинен симулювати, має вартість продуктивності, тому ви хочете видалити кожну кістку, яка надто мала, щоб вплинути на симуляцію, а також усі корисні кістки.

Наприклад, якщо ми візьмемо гуманоїда, ви не хочете мати фізичні кістки для кожного пальця. Натомість ви можете використовувати одну кістку для всієї руки або одну для долоні, одну для великого пальця та останню для інших чотирьох пальців.

Видаліть ці фізичні кістки: MASTER, waist, neck, headtracker. Це дає нам оптимізований скелет і полегшує керування регдоллом.

Коригування форми зіткнення

Наступним завданням є налаштування форми зіткнення та розміру фізичних кісток відповідно до частини тіла, яку кожна кістка має імітувати.

../../_images/ragdoll_shape_adjust.gif

Коригування суглобів

Після того, як ви відкоригували форми зіткнень, ваша рагдолл майже готова. Ви просто хочете відрегулювати штифтові з’єднання, щоб отримати кращу імітацію. Вузли PhysicalBone мають необмежене штифтове з’єднання, призначене їм за замовчуванням. Щоб змінити штифт, виберіть PhysicalBone і змініть тип обмеження в розділі Joint. Там ви можете змінити орієнтацію обмеження та його межі.

../../_images/ragdoll_joint_adjust.gif

Ось кінцевий результат:

../../_images/ragdoll_result.png

Імітація регдолла

Регдолл готовий до використання. Щоб запустити симуляцію та відтворити анімацію ragdoll, потрібно викликати метод physical_bones_start_simulation. Приєднайте скрипт до каркасного вузла та викличте метод у методі _ready:

func _ready():
    physical_bones_start_simulation()

Щоб зупинити симуляцію, викличте метод physical_bones_stop_simulation().

../../_images/ragdoll_sim_stop.gif

Ви також можете обмежити симуляцію лише кількома кістками. Для цього передайте назви кісток як параметр. Ось приклад часткової симуляції ragdoll:

../../_images/ragdoll_sim_part.gif

Шар і маска зіткнення

Обов’язково правильно налаштуйте шари та маски зіткнень, щоб капсула CharacterBody3D не заважала симуляції фізики:

../../_images/ragdoll_layer.png

Для отримання додаткової інформації прочитайте Шари та маски зіткнення.