Up to date

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

Kollisions-Shapes (3D)

Diese Anleitung erklärt:

  • Die in Godot in 3D verfügbaren Kollisions-Shapes.

  • Verwendung eines konvexen oder konkaven Mesh als Kollisions-Shape.

  • Performance-Überlegungen zu 3D-Kollisionen.

Godot bietet viele Arten von Kollisions-Shapes mit unterschiedlichen Kompromissen zwischen Performance und Genauigkeit.

Sie können die Shape eines PhysicsBody3D definieren, indem Sie einen oder mehrere CollisionShape3Ds als untergeordnete Nodes hinzufügen. Beachten Sie, dass Sie eine Shape3D-Ressource zu Kollisions-Shape-Nodes im Inspector Dock hinzufügen müssen.

Bemerkung

Wenn Sie mehrere Kollisions-Shapes zu einem einzelnen PhysicsBody hinzufügen, müssen Sie sich keine Sorgen machen, dass sie sich überlappen. Sie werden nicht miteinander "kollidieren".

Primitive Kollisions-Shapes

Godot bietet die folgenden primitiven Kollisions-Shape-Typen:

Sie können die Kollision der meisten kleineren Objekte mit einer oder mehreren einfachen Shapes darstellen. Für komplexere Objekte wie ein großes Schiff oder eine ganze Ebene benötigen Sie möglicherweise stattdessen konvexe oder konkave Shapes. Mehr dazu weiter unten.

Wir empfehlen, primitive Shapes für dynamische Objekte wie RigidBodys und CharacterBodys zu bevorzugen, da ihr Verhalten am zuverlässigsten ist. Außerdem bieten sie oft eine bessere Performance.

Konvexe Kollisions-Shapes

Konvexe Kollisions-Shapes sind ein Kompromiss zwischen primitiven Kollisions-Shapes und konkaven Kollisions-Shapes. Sie können Shapes jeglicher Komplexität darstellen, allerdings mit einem wichtigen Vorbehalt. Wie ihr Name schon sagt, kann eine einzelne Shape nur eine konvexe Shape darstellen. Eine Pyramide ist zum Beispiel konvex, aber ein hohler Kasten ist konkav. Um ein konkaves Objekt mit einer einzelnen Kollisions-Shape zu definieren, müssen Sie eine konkave Kollisions-Shape verwenden.

Je nach Komplexität des Objekts können Sie eine bessere Performance erzielen, wenn Sie mehrere konvexe Shapes anstelle eines konkaven Kollisions-Shape verwenden. Mit Godot können Sie konvexe Zerlegung verwenden, um konvexe Shapes zu erzeugen, die in etwa einem hohlen Objekt entsprechen. Beachten Sie, dass dieser Performance-Vorteil ab einer bestimmten Anzahl von konvexen Shapes nicht mehr gilt. Für große und komplexe Objekte, wie z. B. eine ganze Ebene, empfehlen wir, stattdessen konkave Shapes zu verwenden.

Sie können eine oder mehrere konvexe Kollisions-Shapes aus dem Editor erzeugen, indem Sie eine MeshInstance3D auswählen und das Menü Mesh oben im 3D Viewport verwenden. Der Editor verfügt über zwei Generierungsmodi:

  • Einfachen konvexen Kollisionsnachbarn erzeugen verwendet den Quickhull-Algorithmus. Er erzeugt einen CollisionShape-Node mit einer automatisch generierten konvexen Kollisions-Shape. Da er nur eine einzige Shape erzeugt, bietet er eine gute Performance und ist ideal für kleine Objekte.

  • Mehrere konvexe Kollisionsnachbarn erstellen verwendet den V-HACD-Algorithmus. Er erzeugt mehrere CollisionShape-Nodes, jeder mit einer konvexen Shape. Da er mehrere Shapes erzeugt, ist er bei konkaven Objekten genauer, geht aber auf Kosten der Performance. Bei Objekten mit mittlerer Komplexität ist er wahrscheinlich schneller als die Verwendung einer einzelnen konkaven Shape.

Konkave oder Trimesh Kollisions-Shapes

Konkave Kollisions-Shapes, auch Trimesh-Kollisions-Shapes genannt, können jede Form annehmen, von ein paar Dreiecken bis zu Tausenden von Dreiecken. Konkave Shapes sind die langsamste Option, aber auch die genaueste in Godot. Konkave Shapes können nur innerhalb von StaticBodys verwendet werden. Sie funktionieren nicht mit CharacterBodys oder RigidBodys, es sei denn, der Modus des RigidBody ist Statisch.

Bemerkung

Auch wenn konkave Shapes die genauesten Kollisionen bieten, kann die Kontaktrückmeldung weniger präzise sein als bei primitiven Shapes.

Wenn Sie keine GridMaps für das Leveldesign verwenden, sind konkave Shapes der beste Ansatz für die Kollisionen in einem Level. Wenn Ihr Level jedoch kleine Details enthält, sollten Sie diese aus Gründen der Performance und des Spielgefühls von der Kollision ausschließen. Zu diesem Zweck können Sie ein vereinfachtes Kollisions-Mesh in einem 3D-Modellierer erstellen und Godot automatisch eine Kollisions-Shape dafür generieren lassen. Mehr dazu weiter unten

Beachten Sie, dass eine konkave Shape im Gegensatz zu primitiven und konvexen Shapes kein tatsächliches "Volumen" hat. Sie können Objekte sowohl außerhalb der Shape als auch innerhalb platzieren.

Sie können eine konkave Shape aus dem Editor erzeugen, indem Sie eine MeshInstance3D auswählen und das Menü Mesh oben im 3D-Viewport verwenden. Der Editor bietet zwei Optionen an:

  • Trimesh-Static Body erzeugen ist eine komfortable Option. Sie erzeugt einen StaticBody mit einer konkaven Form, die der Geometrie des Meshes entspricht.

  • Trimesh Kollisions-Nachbarn erzeugen erstellt einen CollisionShape-Node mit einer konkaven Form, die der Geometrie des Meshs entspricht.

Siehe auch

Siehe 3D-Szenen importieren für Informationen darüber, wie man Modelle für Godot exportiert und beim Import automatisch Shapes für Kollisionen erzeugt.

Performance-Hinweise

Sie sind nicht auf einen einzigen Kollisions-Shape pro PhysicsBody beschränkt. Dennoch empfehlen wir, die Anzahl der Shapes so gering wie möglich zu halten, um die Performance zu verbessern, insbesondere für dynamische Objekte wie RigidBodys und CharacterBodys. Vermeiden Sie außerdem das Verschieben, Drehen oder Skalieren von CollisionShapes, um von den internen Optimierungen der Physik-Engine zu profitieren.

Bei Verwendung eines einzigen nicht transformierten Kollisions-Shape in einem StaticBody kann der Algorithmus der breiten Phase der Engine inaktive PhysicsBodys verwerfen. Die schmale Phase muss dann nur noch die Shapes der aktiven Bodys berücksichtigen. Wenn ein StaticBody viele Kollisions-Shape hat, wird die breite Phase fehlschlagen. Die schmale Phase, die langsamer ist, muss dann für jeden Shape eine Kollisionsprüfung durchführen.

Wenn Sie auf Performance-Probleme stoßen, müssen Sie möglicherweise Abstriche bei der Genauigkeit machen. Bei den meisten Spielen gibt es keine 100% genaue Kollision. Sie finden kreative Wege, um sie zu verstecken oder anderweitig während des normalen Spielverlaufs unbemerkbar zu machen.