Up to date

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

Ragdoll-System

Einführung

Seit Version 3.1 unterstützt Godot die Ragdoll-Physik. Ragdolls verlassen sich auf Physiksimulationen, um realistische prozedurale Animationen zu erstellen. Sie werden in vielen Spielen für Todesanimationen verwendet.

In diesem Tutorial verwenden wir die Platformer3D-Demo, um eine Ragdoll einzurichten.

Bemerkung

Sie können die Platformer3D-Demo auf GitHub oder über die Asset-Bibliothek herunterladen.

Einrichten der Ragdoll

Erstellen von Physik-Knochen

Wie viele andere Funktionen in der Engine gibt es einen Node, um eine Ragdoll einzurichten: den PhysicalBone3D-Node. Um die Einrichtung zu vereinfachen, kann man PhysicalBone Nodes mit dem "Physisches Skelett erzeugen"-Feature im Skelett-Node erzeugen.

Öffnen Sie die Platformer-Demo in Godot und dann die Robi-Szene. Wählen Sie den Skeleton-Node. Ein Skelett-Knopf erscheint in der oberen Menüleiste:

../../_images/ragdoll_menu.png

Klicken Sie darauf und wählen Sie die Option Physikalisches Skelett erstellen. Godot erzeugt PhysicalBone-Nodes und Collision Shapes für jeden Knochen im Skelett und Gelenkpunkte, um sie miteinander zu verbinden:

../../_images/ragdoll_bones.png

Einige der erzeugten Knochen sind nicht notwendig: der MASTER-Knochen zum Beispiel. Wir werden also das Skelett bereinigen, indem wir sie entfernen.

Bereinigen des Skeletts

Jeder PhysicalBone, den die Engine simulieren muss, kostet Performance, so dass Sie alle Knochen entfernen wollen, die zu klein sind, um einen Unterschied in der Simulation zu machen, ebenso wie alle Hilfsknochen.

Nehmen wir zum Beispiel einen Humanoiden, so wollen Sie nicht für jeden Finger einen physikalischen Knochen haben. Man kann stattdessen einen einzigen Knochen für die gesamte Hand verwenden, oder einen für die Handfläche, einen für den Daumen und einen letzten für die anderen vier Finger.

Entfernen Sie diese physikalischen Knochen: MASTER, waist, neck, headtracker. Dies gibt uns ein optimiertes Skelett und macht es einfacher, die Ragdoll zu kontrollieren.

Anpassen der Collision Shape

Die nächste Aufgabe ist die Anpassung der Collision Shape und der Größe der physikalischen Knochen an den Teil des Bodys, den jeder Knochen simulieren soll.

../../_images/ragdoll_shape_adjust.gif

Justierung der Gelenke

Nachdem Sie die Collision Shapes angepasst haben, ist Ihre Ragdoll fast fertig. Sie müssen nur noch die Gelenkpunkte anpassen, um eine bessere Simulation zu erhalten. Nodes mit dem Namen PhysicalBone sind standardmäßig mit einem unbeschränkten Gelenkpunkt versehen. Um den Gelenkpunkt zu ändern, selektieren Sie den PhysicalBone und ändern Sie den Beschränkungs-Typ im Joint-Abschnitt. Dort können Sie die Ausrichtung und die Grenzen der Beschränkung ändern.

../../_images/ragdoll_joint_adjust.gif

Dies ist das Endergebnis:

../../_images/ragdoll_result.png

Simulation der Ragdoll

Die Ragdoll ist jetzt einsatzbereit. Um die Simulation zu starten und die Ragdoll-Animation abzuspielen, müssen Sie die Methode physical_bones_start_simulation aufrufen. Hängen Sie ein Skript an den Skelett-Node an und rufen Sie diese Methode in der _ready Methode auf:

func _ready():
    physical_bones_start_simulation()

Um die Simulation zu stoppen, rufen Sie die Methode physical_bones_stop_simulation() auf.

../../_images/ragdoll_sim_stop.gif

Sie können die Simulation auch auf einige wenige Knochen beschränken. Dazu übergeben Sie die Knochennamen als Parameter. Hier ist ein Beispiel für eine partielle Ragdoll-Simulation:

../../_images/ragdoll_sim_part.gif

Kollisionsebene und Maske

Stellen Sie sicher, daß Sie Ihre Kollisionsebenen und Masken richtig einstellen, damit die Capsule der CharacterBody3D nicht der Physiksimulation in die Quere kommt:

../../_images/ragdoll_layer.png

Für weitere Informationen, siehe Kollisionsebenen und -masken.