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:
C++ (Tutorial)
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.