Was ist GDExtension?

Einführung

GDExtension is a Godot-specific technology that lets the engine interact with native shared libraries at runtime. You can use it to run native code without compiling it with the engine.

Bemerkung

GDExtension ist keine Skriptsprache und hat keine Beziehung zu GDScript.

Unterschiede zwischen GDExtension und C++-Modulen

Sie können sowohl GDExtension als auch C++-Module verwenden, um C- oder C++-Code in einem Godot-Projekt auszuführen.

Beide ermöglichen es Ihnen auch, Bibliotheken von Drittanbietern in Godot zu integrieren. Welche Sie wählen sollten, hängt von Ihren Bedürfnissen ab.

Warnung

GDExtension is currently experimental, which means that we may break compatibility in order to fix major bugs or include critical features.

Vorteile von GDExtension

Im Gegensatz zu Modulen muss bei GDExtension der Quellcode der Engine nicht kompiliert werden, was die Weitergabe Ihrer Arbeit erleichtert. Sie gibt Ihnen Zugang zu den meisten APIs, die GDScript und C# zur Verfügung stehen, und erlaubt Ihnen, Spiellogik mit voller Kontrolle über die Performance zu programmieren. Es ist ideal, wenn Sie leistungsstarken Code benötigen, den Sie als Add-on in der Asset-Bibliothek verteilen möchten.

Außerdem:

  • Die GDExtension ist nicht auf C und C++ beschränkt. Dank Drittanbieter-Bindings können Sie sie mit vielen anderen Sprachen verwenden.

  • You can use the same compiled GDExtension library in the editor and exported project. With C++ modules, you have to recompile all the export templates you plan to use if you require its functionality at runtime.

  • Bei GDExtension müssen Sie nur Ihre Bibliothek kompilieren, nicht die gesamte Engine. Das ist anders als bei C++-Modulen, die statisch in die Engine kompiliert werden. Jedes Mal, wenn Sie ein Modul ändern, müssen Sie die Engine neu kompilieren. Selbst bei inkrementellen Builds ist dieser Prozess langsamer als bei der Verwendung von GDExtension.

Vorteile von C++-Modulen

Wir empfehlen C++-Module in Fällen, in denen GDExtension nicht ausreichend ist:

  • C++-Module bieten eine tiefere Integration in die Engine. Der Zugriff von GDExtension ist nicht so tief wie bei statischen Modulen.

  • Sie können C++-Module verwenden, um zusätzliche Funktionen in einem Projekt bereitzustellen, ohne native Bibliotheksdateien mit sich herumtragen zu müssen. Dies gilt auch für exportierte Projekte.

Bemerkung

Wenn Sie feststellen, dass bestimmte Systeme nicht über die GDExtension, sondern über benutzerdefinierte Module zugänglich sind, können Sie gerne eine Issue im godot-cpp-Repository erstellen, um Implementierungsmöglichkeiten für die fehlende Funktionalität zu diskutieren.

Unterstützte Sprachen

Die Godot-Entwickler unterstützen offiziell die folgenden Sprach-Bindings für GDExtension:

Bemerkung

Es gibt keine Pläne, weitere Sprachen mit GDExtension offiziell zu unterstützen. Die Community bietet jedoch mehrere Bindings für andere Sprachen an (siehe unten).

Die folgenden Bindings werden von der Community entwickelt und gepflegt:

Bemerkung

Nicht alle hier erwähnten Bindings sind für den produktiven Einsatz geeignet. Informieren Sie sich gründlich über die Optionen, bevor Sie ein Projekt mit einer dieser Bindings beginnen. Prüfen Sie auch, ob das Binding mit der von Ihnen verwendeten Godot-Version kompatibel ist.

Versionskompatibilität

Usually, GDExtensions targeting an earlier version of Godot will work in later minor versions, but not vice-versa. For example, a GDExtension targeting Godot 4.2 should work just fine in Godot 4.3, but one targeting Godot 4.3 won't work in Godot 4.2.

For this reason, when creating GDExtensions, you may want to target the lowest version of Godot that has the features you need, not the most recent version of Godot. This can save you from needing to create multiple builds for different versions of Godot.

Allerdings ist GDExtension derzeit experimentell, was bedeutet, dass wir Kompatibilitätsbrüche vornehmen können, um größere Bugs zu beheben oder kritische Funktionen aufzunehmen. Zum Beispiel sind GDExtensions, die für Godot 4.0 erstellt wurden, nicht mit Godot 4.1 kompatibel (siehe Aktualisieren Ihrer GDExtension für 4.1).

GDExtensions are also only compatible with engine builds that use the same level of floating-point precision the extension was compiled for. This means that if you use an engine build with double-precision floats, the extension must also be compiled for double-precision floats and use an extension_api.json file generated by your custom engine build. See Große-Welt-Koordinaten for details.

Generally speaking, if you build a custom version of Godot, you should generate an extension_api.json from it for your GDExtensions, because it may have some differences from official Godot builds.