Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Система Ragdoll

Введение

Начиная с версии 3.1, Godot поддерживает физику ragdoll'ов. Для создания реалистичной процедурной анимации ragdoll'ы используют физическое моделирование. Они используются для анимации смерти во многих играх.

В этом руководстве мы будем использовать пример Platformer3D для настройки ragdoll'ов.

Примечание

You can download the Platformer3D demo on GitHub or using the Asset Library.

Настройка ragdoll'а

Создание физических костей

Как и для многих других возможностей движка, существует узел для настройки ragdoll'а: PhysicalBone3D. Для упрощения настройки Вы можете создать узлы PhysicalBone через функцию "Создать физический скелет" в узле Skeleton3D.

Откройте демо платформера в Godot, а затем сцену Robi. Выберите узел Skeleton. В меню верхней панели появится кнопка скелета:

../../_images/ragdoll_menu.png

Щелкните его и выберите опцию Создать физический скелет. Godot будет генерировать узлы PhysicalBone и формы столкновений для каждой кости скелета и соединит их между собой:

../../_images/ragdoll_bones.png

Некоторые из созданных костей не являются необходимыми: например, кость``MASTER``. Мы очистим скелет, удалив её.

Очистка скелета

Каждая PhysicalBone, которую должен моделировать движок, ухудшает производительность, поэтому вы скорее всего захотите удалить каждую кость, которая слишком мала, чтобы оказывать влияние на моделирование, а также все вспомогательные кости.

Например, если мы берем гуманоида, вам не нужно иметь физические кости для каждого пальца. Вместо этого Вы можете использовать единственную кость для всей руки, или одну для ладони, одну для большого пальца и последнюю для остальных четырех пальцев.

Удалите эти физические кости: MASTER, waist, neck, headtracker. Это даст нам оптимизированный скелет и облегчит управление ragdoll'ом.

Настройка форм столкновений

Следующая задача — настроить форму столкновений и размеры физических костей так, чтобы они соответствовали частям тела, которые должна моделировать каждая кость.

../../_images/ragdoll_shape_adjust.gif

Настройка суставов

Как только Вы настроили формы столкновения, Ваша кукла почти готова. Вы просто хотите настроить суставы для более качественного моделирования. У узлов PhysicalBone есть неограниченный сустав, назначенный на них по умолчанию. Чтобы изменить сустав, выберите PhysicalBone и поменяйте тип ограничения в разделе Joint. Там Вы можете изменить ориентацию ограничения и ее пределы.

../../_images/ragdoll_joint_adjust.gif

Это и есть финальный результат:

../../_images/ragdoll_result.png

Моделирование ragdoll'а

Теперь ragdoll готов к использованию. Чтобы запустить симуляцию и воспроизвести анимацию 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

Для получения дополнительной информации см. Слои и маски столкновений.