Up to date

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

Sistema de ragdoll

Introducción

Desde la versión 3.1, Godot soporta la física del muñeca de trapo. Los muñecos de trapo se basan en la simulación de la física para crear animaciones de procedimientos realistas. Se utilizan para animaciones de muerte en muchos juegos.

En este tutorial, usaremos la demo de Platformer3D para crear una muñeca de trapo.

Nota

Puedes descargar la demo de Platformer3D en GitHub o usando la Asset Library.

Creando el ragdoll

Creación de huesos físicos

Like many other features in the engine, there is a node to set up a ragdoll: the PhysicalBone3D node. To simplify the setup, you can generate PhysicalBone nodes with the "Create physical skeleton" feature in the skeleton node.

Abre la demo de la plataforma en Godot, y luego la escena de Robi. Selecciona el nodo Skeleton. Un botón esqueleto aparece en el menú de la barra superior:

../../_images/ragdoll_menu.png

Haz clic en él y selecciona la opción Crear esqueleto físico. Godot generará nodos PhysicalBone y formas de colisión para cada hueso del esqueleto y unirá las articulaciones para conectarlos:

../../_images/ragdoll_bones.png

Algunos de los huesos generados no son necesarios: el hueso MASTER por ejemplo. Así que vamos a limpiar el esqueleto quitándolos.

Limpiando el esqueleto

Cada PhysicalBone que el motor necesita simular tiene un coste de rendimiento, por lo que quieres eliminar cada hueso que sea demasiado pequeño para marcar la diferencia en la simulación, así como todos los huesos de utilidad.

Por ejemplo, si tomamos un humanoide, no quieres tener huesos físicos para cada dedo. Puedes usar un solo hueso para toda la mano en su lugar, o uno para la palma, uno para el pulgar, y uno último para los otros cuatro dedos.

Quitar estos huesos físicos: MASTER, waist, neck, headtracker. Esto nos da un esqueleto optimizado y hace más fácil el control de la muñeca de trapo.

Ajuste de formas de colisión

La siguiente tarea es ajustar la forma de la colisión y el tamaño de los huesos físicos para que coincidan con la parte del cuerpo que cada hueso debe simular.

../../_images/ragdoll_shape_adjust.gif

Ajuste de las articulaciones

Una vez ajustadas las formas de colisión, su muñeca de trapo está casi lista. Sólo quieres ajustar las articulaciones para obtener una mejor simulación. Los nodos de``PhysicalBone``tienen asignada por defecto una articulación sin restricciones. Para cambiar la articulación, selecciona PhysicalBone y cambia el tipo de restricción en la sección Joint. Allí, puedes cambiar la orientación de la restricción y sus límites.

../../_images/ragdoll_joint_adjust.gif

Este es el resultado final:

../../_images/ragdoll_result.png

Simulando el ragdoll

La muñeca de trapo está lista para ser usada. Para iniciar la simulación y reproducir la animación del ragdoll, necesitas llamar al método physical_bones_start_simulation. Adjunta un script al nodo del esqueleto y llama al método en el método _ready:

func _ready():
    physical_bones_start_simulation()

Para detener la simulación, llama al método physical_bones_stop_simulation().

../../_images/ragdoll_sim_stop.gif

También puedes limitar la simulación a sólo unos pocos huesos. Para ello, pasa los nombres de los huesos como un parámetro. Aquí hay un ejemplo de simulación parcial de muñeco de trapo:

../../_images/ragdoll_sim_part.gif

Capas y máscaras de colisión

Make sure to set up your collision layers and masks properly so the CharacterBody3D's capsule doesn't get in the way of the physics simulation:

../../_images/ragdoll_layer.png

Para más información, lee Capas y Máscaras de Colisión.