Système Ragdoll

Introduction

Depuis la version 3.1, Godot supporte la physique de ragdoll. Les Ragdolls se servent de la simulation physique pour créer une animation procédurale réaliste. Ils sont utilisés pour les animations de mort dans beaucoup de jeux.

Dans ce tutoriel, nous allons utiliser la démo Platformer3D pour mettre en place un ragdoll.

Note

Vous pouvez télécharger la démo Platformer3D sur GitHub ou en utilisant la Bibliothèque d'assets.

La configuration du ragdoll

Créer des os physiques

Comme beaucoup d'autres fonctionnalités du moteur, il y a un nœud pour mettre en place un ragdoll : le nœud PhysicalBone. Pour simplifier le paramétrage, vous pouvez générer les nœuds PhysicalBone avec la fonctionnalité "Créer un squelette physique" du nœud Skeleton.

Ouvrez la démo jeu de platforme dans Godot, et la scène de Robi. Sélectionnez le nœud Skeleton. Un bouton squelette apparaît dans le menu en haut de la fenêtre d'affichage :

../../_images/ragdoll_menu.png

Cliquez dessus et sélectionnez l'option Créer un squelette physique. Godot va générer des nœuds PhysicalBone et des formes de collision pour chaque os du squelette et des joints épingle (PinJoint) pour les connecter ensemble :

../../_images/ragdoll_bones.png

Certains des os générés ne sont pas nécessaires : l'os MASTER par exemple. On va donc nettoyer le squelette en les enlevant.

Nettoyer le squelette

Chaque PhysicalBone que le moteur a besoin de simuler a un coût en terme de performance, il vaut donc mieux enlever tous les os qui sont trop petits pour faire une différence dans la simulation, ainsi que tous les os utilitaires.

Par exemple, si on prend un humanoïde, on ne veut pas avoir d'os physique pour chaque doigt. Vous pouvez utiliser juste un os pour l'ensemble de la main à la place, ou un pour la paume, un pour le pouce, et enfin un pour les quatre autres doigts.

Enlevez ces os physiques : MASTER, waist, neck, headtracker. Cela nous donne un squelette optimisé et rend le contrôle du ragdoll plus aisé.

Ajustement de la forme de collision

La tâche suivante consiste à ajuster les formes de collisions et la taille des os physiques pour les faire correspondre à la partie du corps que chaque os doit simuler.

../../_images/ragdoll_shape_adjust.gif

Ajustement des joints

Une fois les formes de collision ajustées, votre ragdoll est presque prêt. Vous devez juste ajuster les joints épingle pour obtenir une meilleure simulation. Les nœuds PhysicalBone ont un joint épingle sans contrainte assigné par défaut. Pour changer le joint, sélectionnez l'os et changez le type de contrainte dans la section Joint. C'est là que vous pouvez changer l'orientation de la contrainte et ses limites.

../../_images/ragdoll_joint_adjust.gif

Ceci est le résultat final :

../../_images/ragdoll_result.png

Simuler le ragdoll

Le ragdoll est maintenant prêt à être utilisé. Pour démarrer la simulation et jouer l'animation de ragdoll, vous devez appeler la méthode physical_bones_start_simulation. Attachez un script au nœud du squelette et appelez la méthode dans la méthode _ready :

func _ready():
    physical_bones_start_simulation()

Pour arrêter la simulation, appeler la méthode physical_bones_stop_simulation().

../../_images/ragdoll_sim_stop.gif

Vous pouvez aussi limiter la simulation à seulement certains os. Pour faire cela, passez les noms des os comme paramètre. Voici un exemple de simulation de ragdoll partielle :

../../_images/ragdoll_sim_part.gif

Niveau et masque de collision

Faites en sorte que le paramétrage de vos niveaux et masques de collision soit fait correctement pour que la capsule du KinematicBody n'interfère pas avec la simulation physique du ragdoll :

../../_images/ragdoll_layer.png

For more information, read Niveaux et masques de collisions.