Ragdoll system

Introduzione

Dalla versione 3.1, Godot supporta la fisica di ragdoll. I ragdoll dipendono sulla simulazione della fisica per creare animazioni procedurali realistiche. Sono utilizzati per le animazioni di morte in molti giochi.

In this tutorial, we will be using the Platformer3D demo to set up a ragdoll.

Nota

Puoi scaricare la demo di Platformer3D su GitHub oppure attraverso la Libreria dei contenuti.

Setting up the ragdoll

Creating physical bones

Come molte altre funzionalità del motore, c'è un nodo per impostare un ragdoll: il nodo PhysicalBone3D. Per semplificare la configurazione, è possibile generare nodi PhysicalBone con la funzionalità "Crea scheletro fisico" nel nodo scheletro.

Apri la demo del platform in Godot, quindi la scena di Robi. Seleziona il nodo Skeleton. Un pulsante scheletro appare nel menu della barra superiore:

../../_images/ragdoll_menu.png

Cliccaci sopra e seleziona l'opzione Crea scheletro fisico. Godot genererà nodi PhysicalBone e forme di collisione per ogni osso dello scheletro e perni per collegarli tra loro:

../../_images/ragdoll_bones.png

Alcune delle ossa generate non sono necessarie: ad esempio l'osso MASTER. Quindi ripuliremo lo scheletro rimuovendole.

Ripulire lo scheletro

Each PhysicalBone the engine needs to simulate has a performance cost, so you want to remove every bone that is too small to make a difference in the simulation, as well as all utility bones.

Ad esempio, se prendiamo un umanoide, non vogliamo avere ossa fisiche per ogni dito. Possiamo usare un singolo osso per l'intera mano, oppure uno per il palmo, uno per il pollice e un ultimo per le altre quattro dita.

Rimuovi queste ossa fisiche: MASTER, waist, neck, headtracker. Questo ci dà uno scheletro ottimizzato e rende più facile controllare il ragdoll.

Aggiustamento della forma di collisione

The next task is adjusting the collision shape and the size of physical bones to match the part of the body that each bone should simulate.

../../_images/ragdoll_shape_adjust.gif

Joints adjustment

Once you adjusted the collision shapes, your ragdoll is almost ready. You just want to adjust the pin joints to get a better simulation. PhysicalBone nodes have an unconstrained pin joint assigned to them by default. To change the pin joint, select the PhysicalBone and change the constraint type in the Joint section. There, you can change the constraint's orientation and its limits.

../../_images/ragdoll_joint_adjust.gif

Questo è il risultato finale:

../../_images/ragdoll_result.png

Simulare la ragdoll

Il ragdoll è ora pronto per l'uso. Per avviare la simulazione e riprodurre l'animazione del ragdoll, è necessario chiamare il metodo physical_bones_start_simulation. Collega uno script al nodo scheletro e chiamalo nel metodo _ready:

func _ready():
    physical_bones_start_simulation()

Per interrompere la simulazione, chiama il metodo physical_bones_stop_simulation().

../../_images/ragdoll_sim_stop.gif

Puoi anche limitare la simulazione a soltanto qualche osso. Per farlo, passa i nomi delle ossa come parametro. Ecco un esempio di simulazione parziale di ragdoll:

../../_images/ragdoll_sim_part.gif

Strato e maschera di collisione

Assicurati di impostare correttamente gli strati e le maschere di collisione in modo che la capsula di CharacterBody3D non si metta in mezzo la simulazione della fisica:

../../_images/ragdoll_layer.png

Per ulteriori informazioni, leggere Collision layers and masks.