Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Collision-Shapes (3D)

Diese Anleitung erklärt:

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

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

  • Performance-Überlegungen zu 3D-Kollisionen.

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

You can define the shape of a PhysicsBody3D by adding one or more CollisionShape3Ds as direct child nodes. Indirect child nodes (i.e. children of child nodes) will be ignored and won't be used as collision shapes. Also, note that you must add a Shape3D resource to collision shape nodes in the Inspector dock.

Bemerkung

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

Primitive Collision-Shapes

Godot bietet die folgenden primitiven Collision-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 Collision-Shapes

Konvexe Collision-Shapes sind ein Kompromiss zwischen primitiven Collision-Shapes und konkaven Collision-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 Collision-Shape zu definieren, müssen Sie eine konkave Collision-Shape verwenden.

Je nach Komplexität des Objekts können Sie eine bessere Performance erzielen, wenn Sie mehrere konvexe Shapes anstelle eines konkaven Collision-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 Collision-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 Collision-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 Collision-Shapes

Konkave Collision-Shapes, auch Trimesh-Collision-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.

When not using GridMaps for level design, concave shapes are the best approach for a level's collision. That said, if your level has small details, you may want to exclude those from collision for performance and game feel. To do so, you can build a simplified collision mesh in a 3D modeler and have Godot generate a collision shape for it automatically. More on that below.

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 Meshes 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 Collision-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 Collision-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 Collision-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.