Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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

Вступ

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

У цьому посібнику ми використовуватимемо демоверсію Platformer 3D для створення рагдолла.

Примітка

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

Ви також можете переглянути приклад повної конфігурації ragdoll у демо-версії Ragdoll Physics.

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

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

Як і багато інших функцій двигуна, є два вузли, які використовуються для налаштування ragdoll:

  • Вузол PhysicalBoneSimulator3D. Цей вузол є батьківським для всіх фізичних кісток і відповідає за керування симуляцією.

  • Один або декілька дочірніх вузлів PhysicalBone3D. Кожен вузол представляє одну кістку в ганчірковій ляльці.

Відкрийте демоверсію платформера в Godot, а потім сцену player/player.tscn. Виберіть вузол Skeleton3D. У верхній частині області перегляду 3D-редактора з'явиться кнопка скелета:

Створення фізичного скелета в редакторі

Створення фізичного скелета в редакторі

Клацніть на ньому та виберіть опцію Create Physical Skeleton. Godot згенерує вузли PhysicalBone3D та форми зіткнень для кожної кістки скелета та з'єднає їх разом за допомогою штифтів:

Дерево сцени гравця після створення фізичного скелета

Дерево сцени гравця після створення фізичного скелета

Деякі з згенерованих кісток не потрібні, як-от кістка MASTER у цій сцені. Ми збираємося очистити скелет, видаливши їх.

Очистити та оптимізувати скелет

Для кожного PhysicalBone3D, який має змоделювати движок, існують витрати на зниження продуктивності. Вам потрібно буде видалити всі кістки, які є занадто малими, щоб вплинути на результат симуляції, а також усі допоміжні кістки.

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

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

Налаштування суглобів та обмежень

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

З'єднання також мають видимий у 3D-редакторі гізмо, тому ви можете побачити їхні обмеження в дії.

Налаштування суглобів в інспекторі після вибору вузла PhysicalBone3D

Налаштування суглобів в інспекторі після вибору вузла PhysicalBone3D

Порада

Щоб отримати кращий огляд під час редагування з'єднань та форм зіткнень, ви можете зробити наступне:

  • Приховайте вузли PhysicalBone3D, над якими ви зараз не працюєте, щоб ви могли зосередитися на тих, які налаштовуєте.

  • Приховайте MeshInstance3D персонажа, клацнувши значок ока поруч із ним у доку дерева сцен.

  • Приховайте ґімо Skeleton3D, щоб помаранчеві трикутники, що представляють скелет, не захаращували область перегляду, залишаючи решту видимою. Для цього натисніть View > Gizmos > Skeleton3D у верхній частині області перегляду 3D-редактора, доки значок ока не закриється.

  • Вимкніть середовище попереднього перегляду, натиснувши значок глобуса у верхній частині вікна перегляду 3D-редактора.

  • Встановіть для параметра проекту Default Clear Color значення чисто чорного в налаштуваннях проекту. Це працює, лише якщо середовище попереднього перегляду вимкнено.

  • Змініть режим малювання налагодження за допомогою кнопки Perspective у верхньому лівому куті вікна перегляду 3D-редактора. Опції Display Wireframe та Display Overdraw особливо корисні під час налаштування форм зіткнень, оскільки вони дозволяють бачити крізь оригінальну сітку.

  • Використовуйте ортографічну камеру, натискаючи кнопки X/Y/Z у верхньому правому куті області перегляду 3D-редактора.

Ось список доступних суглобів:

  • Немає: Не виконує жодних обмежень.

  • Конічне з'єднання: Кульова форма. Корисно для плечей, стегон, шиї.

  • Шарнірне з'єднання: Забезпечує кутове обмеження; уявіть його як дверну петлю. Корисно для ліктів та колін.

  • PinJoint: З'єднує два тіла (за замовчуванням). Призводить до «зминання» кісток, тому для більшості персонажів рекомендується використовувати інші типи з'єднань.

  • SliderJoint: Ковзає одну кістку вздовж іншої вздовж певної осі.

  • 6DOFJoint: Найпотужніший шарнір, що пропонує як лінійні, так і кутові обмеження, але також найскладніший для налаштування.

Якщо сумніваєтеся, почніть з HingeJoint та ConeJoint, оскільки вони охоплюють більшість випадків використання:

  • Для шарнірного з'єднання переконайтеся, що в розділі Joint Constraints інспектора ввімкнено Angular Limit. Після його ввімкнення ви зможете побачити кут, на який воно обмежене, у вікні перегляду. Ви можете повернути PhysicalBone3D, щоб змінити вісь, де обмежено з'єднання, а потім налаштувати кути.

  • Для ConeJoint зазвичай найкраще обмежувати Розмах повороту між 20 і 90 градусами, а Розмах повороту між 20 і 45 градусами.

Налаштування форм зіткнень

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

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

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

Порада

Щоб призупинити відтворення анімації під час налаштування ганчіркової ляльки, виберіть вузол AnimationTree та вимкніть властивість Active в Інспекторі. Не забудьте знову ввімкнути її після завершення, оскільки вона керує відтворенням анімації під час гри.

Налаштування форм зіткнень у 3D-редакторі

Налаштування форм зіткнень у 3D-редакторі

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

Результат після коригування з'єднань та форм зіткнень (сітка гравця прихована для видимості)

Результат після коригування з'єднань та форм зіткнень (сітка гравця прихована для видимості)

Імітуйте ганчіркову ляльку

Тепер ганчіркова лялька готова до використання. Щоб розпочати симуляцію та відтворити анімацію ганчіркової ляльки, потрібно викликати метод PhysicalBoneSimulator3D.physical_bones_start_simulation(). Приєднайте скрипт до вузла PhysicalBoneSimulator3D, який є батьківським для всіх вузлів PhysicalBone3D у нашій сцені, а потім викличте його в методі скрипта _ready:

func _ready():
    physical_bones_start_simulation()

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

Ви також можете обмежити симуляцію лише кількома кістками. Це може бути корисним для створення таких ефектів, як кінцівки ганчір'ячої ляльки або прикріплення, які можуть взаємодіяти зі світом. Для цього передайте назви кісток (не назви вузлів PhysicalBone3D) як параметр. Щоб побачити назву кістки, перегляньте властивість Назва кістки в інспекторі після вибору вузла PhysicalBone3D.

Порада

Під час використання автоматично згенерованого фізичного скелета, як показано в цьому посібнику, назва кістки також міститься в назві вузла. Наприклад, у Physical Bone l-arm, l-arm – це назва кістки.

func _ready():
    physical_bones_start_simulation(["l-arm", "r-arm"])

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

Ось приклад часткового моделювання ragdoll:

Порада

Щоб контролювати, наскільки сильно часткова симуляція ragdoll впливає на загальну анімацію, ви можете налаштувати властивість Influence у вузлі PhysicalBoneSimulator3D, який є батьківським для всіх вузлів PhysicalBone3D. За замовчуванням вона встановлена на 1.0, що означає, що симуляція ragdoll повністю замінює решту анімації.

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

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

Шари та маски необхідно налаштувати на ці значення в інспекторі для кожного вузла

Шари та маски необхідно налаштувати на ці значення в інспекторі для кожного вузла

Ви можете знайти GridMap у демоверсії 3D-платформера у файлі stage/grid_map.scn. Вузол Area3D монети (на якому потрібно налаштувати шари та маски) можна знайти за адресою coin/coin.tscn.

Порада

Щоб швидко вибрати всі вузли PhysicalBone3D, введіть t:PhysicalBone3D у рядок пошуку у верхній частині панелі дерева сцен. Це відфільтрує дерево сцен, щоб відображалися лише вузли PhysicalBone3D, що дозволить вам вибрати їх усі одночасно, використовуючи Shift + ліва кнопка миші на першому та останньому записах.

Якщо цього не зробити, зіткнення відбуватиметься неправильно, оскільки гравець зіткнеться зі своєю власною (неактивною) ганчірковою лялькою. Це може призвести до того, що гравець буде шалено підстрибувати або застрягти.

Як і RigidBody3D, PhysicalBone3D підтримує винятки колізій через код, використовуючи методи physical_bones_add_collision_exception() та physical_bones_remove_collision_exception(). Це можна використовувати для запобігання колізіям з певним об'єктом без використання шарів та масок.

Дивись також

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