Система Регдолл
Вступ
Починаючи з версії 3.1, Godot підтримує фізику ragdoll. Ragdolls покладаються на симуляцію фізики для створення реалістичної процедурної анімації. Вони використовуються для анімації смерті в багатьох іграх.
У цьому підручнику ми будемо використовувати демонстрацію Platformer3D, щоб налаштувати ragdoll.
Примітка
Ви можете завантажити демоверсію Platformer3D на GitHub або за допомогою Бібліотеки ресурсів.
Налаштування регдолла
Створення фізичних кісток
Як і багато інших функцій механізму, існує вузол для налаштування ragdoll: вузол PhysicalBone3D. Щоб спростити налаштування, ви можете створити вузли PhysicalBone за допомогою функції «Створити фізичний скелет» у вузлі скелета.
Відкрийте демонстрацію платформера в Godot, а потім сцену Robi. Виберіть вузол Skeleton. У меню верхньої панелі з’явиться кнопка-скелет:
Клацніть його та виберіть опцію Створити фізичний скелет. Godot створить вузли PhysicalBone і форми зіткнень для кожної кістки в скелеті та штифтових суглобах, щоб з’єднати їх разом:
Деякі зі згенерованих кісток не потрібні: наприклад, кістка MASTER. Отже, ми збираємося очистити скелет, видаливши їх.
Очищення скелета
Кожна PhysicalBone, яку двигун повинен симулювати, має вартість продуктивності, тому ви хочете видалити кожну кістку, яка надто мала, щоб вплинути на симуляцію, а також усі корисні кістки.
Наприклад, якщо ми візьмемо гуманоїда, ви не хочете мати фізичні кістки для кожного пальця. Натомість ви можете використовувати одну кістку для всієї руки або одну для долоні, одну для великого пальця та останню для інших чотирьох пальців.
Видаліть ці фізичні кістки: MASTER, waist, neck, headtracker. Це дає нам оптимізований скелет і полегшує керування регдоллом.
Коригування форми зіткнення
Наступним завданням є налаштування форми зіткнення та розміру фізичних кісток відповідно до частини тіла, яку кожна кістка має імітувати.
Коригування суглобів
Після того, як ви відкоригували форми зіткнень, ваша рагдолл майже готова. Ви просто хочете відрегулювати штифтові з’єднання, щоб отримати кращу імітацію. Вузли PhysicalBone мають необмежене штифтове з’єднання, призначене їм за замовчуванням. Щоб змінити штифт, виберіть PhysicalBone і змініть тип обмеження в розділі Joint. Там ви можете змінити орієнтацію обмеження та його межі.
Ось кінцевий результат:
Імітація регдолла
Регдолл готовий до використання. Щоб запустити симуляцію та відтворити анімацію ragdoll, потрібно викликати метод physical_bones_start_simulation. Приєднайте скрипт до каркасного вузла та викличте метод у методі _ready:
func _ready():
physical_bones_start_simulation()
public override void _Ready()
{
PhysicalBonesStartSimulation();
}
Щоб зупинити симуляцію, викличте метод physical_bones_stop_simulation().
Ви також можете обмежити симуляцію лише кількома кістками. Для цього передайте назви кісток як параметр. Ось приклад часткової симуляції ragdoll:
Шар і маска зіткнення
Обов’язково правильно налаштуйте шари та маски зіткнень, щоб капсула CharacterBody3D не заважала симуляції фізики:
Для отримання додаткової інформації прочитайте Шари та маски зіткнення.