Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
Kompilieren mit .NET¶
Anforderungen¶
-
Sie können
dotnet --info
verwenden, um zu überprüfen, welche .NET SDK-Versionen installiert sind.
Aktivieren Sie das .NET-Modul¶
Bemerkung
Die C#-Unterstützung für Godot hat in der Vergangenheit die Mono-Runtime anstelle der .NET-Runtime verwendet, und intern werden viele Dinge immer noch als Mono
anstelle von Dotnet
benannt oder auf andere Weise als Mono
bezeichnet.
Standardmäßig ist das .NET-Modul bei der Erstellung deaktiviert. Um es zu aktivieren, fügen Sie die Option module_mono_enabled=yes
zur SCons-Kommandozeile hinzu, während Sie ansonsten den Anweisungen zum Erstellen der gewünschten Godot-Binärdateien folgen.
Generieren Sie den Glue¶
Teile der Quellen der Managed Libraries werden aus der ClassDB generiert. Diese Quelldateien müssen vor der Erstellung der Managed Libraries generiert werden. Sie können von jeder .NET-fähigen Godot-Editor-Binärdatei erzeugt werden, indem man sie mit den Parametern --headless --generate-mono-glue
, gefolgt von dem Pfad zu einem Ausgabeverzeichnis, ausführt. Dieser Pfad muss modules/mono/glue
im Godot-Verzeichnis sein:
<godot_binary> --headless --generate-mono-glue modules/mono/glue
Mit diesem Befehl wird Godot angewiesen, die C#-Bindings für die Godot-API unter modules/mono/glue/GodotSharp/GodotSharp/Generated
und die C#-Bindings für die Editor-Tools unter modules/mono/glue/GodotSharp/GodotSharpEditor/Generated
zu generieren. Sobald diese Dateien generiert sind, können Sie die Godot-Managed Libraries für alle gewünschten Targets erstellen, ohne diesen Prozess wiederholen zu müssen.
<godot_binary>
bezieht sich auf die Editor-Binärdatei, die Sie mit aktiviertem .NET-Modul kompiliert haben. Sein genauer Name hängt von Ihrem System und Ihrer Konfiguration ab, sollte aber die Form bin/godot.<Plattform>.editor.<arch>.mono
haben, z.B. bin/godot.linuxbsd.editor.x86_64.mono
oder bin/godot.windows.editor.x86_32.mono.exe
. Achten Sie besonders auf das Suffix .mono! Wenn Sie Godot zuvor ohne .NET-Unterstützung kompiliert haben, haben Sie möglicherweise ähnlich benannte Binärdateien ohne dieses Suffix. Diese Binärdateien können nicht verwendet werden, um den .NET-Glue zu erzeugen.
Bemerkung
Die Glue-Quellen müssen jedes Mal neu generiert werden, wenn sich die in der ClassDB registrierte API ändert. Das wäre zum Beispiel, wenn eine neue Methode in der Skripting-API registriert wird oder sich einer der Parameter einer solchen Methode ändert. Godot gibt beim Start einen Fehler aus, wenn die API zwischen ClassDB und den Glue-Sourcen nicht übereinstimmt.
Bauen der Managed Libraries¶
Sobald Sie den .NET Glue erzeugt haben, können Sie die Managed Libraries mit dem Skript build_assemblies.py
erstellen:
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin
Wenn alles gut gegangen ist, sollte das GodotSharp
-Verzeichnis, das die Managed Libraries enthält, im bin
-Verzeichnis erstellt worden sein.
Bemerkung
Standardmäßig teilen sich alle Entwicklungs-Builds eine Versionsnummer, was zu Problemen beim Zwischenspeichern der NuGet-Pakete führen kann. Um dieses Problem zu lösen, verwenden Sie entweder GODOT_VERSION_STATUS
, um jedem Build eine eindeutige Version zu geben oder löschen Sie GodotNuGetFallbackFolder
nach jedem Build, um den Paket-Cache zu löschen.
Im Gegensatz zu "klassischen" Godot-Builds kann bei der Erstellung mit aktiviertem .NET-Modul (und je nach Target-Plattform) ein Datenverzeichnis sowohl für den Editor als auch für exportierte Projekte erstellt werden. Dieses Verzeichnis ist wichtig für das ordnungsgemäße Funktionieren und muss zusammen mit Godot veröffentlichen werden. Weitere Einzelheiten zu diesem Verzeichnis finden Sie in Datenverzeichnis.
Build-Plattform¶
Geben Sie das Argument --godot-platform=<platform>
an, um zu bestimmen, für welche Plattform die Bibliotheken gebaut werden sollen. Lassen Sie dieses Argument weg, um für das aktuelle System zu bauen.
Dies regelt derzeit nur die Aufnahme der Unterstützung für Visual Studio als externen Editor, ansonsten sind die Bibliotheken identisch.
NuGet-Pakete¶
Die API-Assemblies, Source-Generatoren und das benutzerdefinierte MSBuild-Projekt-SDK werden als NuGet-Pakete veröffentlicht. Für den Benutzer ist dies alles transparent, aber es kann die Dinge während der Entwicklung kompliziert machen.
In order to use Godot with a development version of those packages, a local NuGet source must be created where MSBuild can find them.
First, pick a location for the local NuGet source. If you don't have a preference, create an empty directory at one of these recommended locations:
On Windows,
C:\Users\<username>\MyLocalNugetSource
On Linux, *BSD, etc.,
~/MyLocalNugetSource
This path is referred to later as <my_local_source>
.
After picking a directory, run this .NET CLI command to configure NuGet to use your local source:
dotnet nuget add source <my_local_source> --name MyLocalNugetSource
When you run the build_assemblies.py
script, pass <my_local_source>
to
the --push-nupkgs-local
option:
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source>
Diese Option stellt sicher, dass die Pakete zur angegebenen lokalen NuGet-Quelle hinzugefügt werden und dass konfliktbehaftete Versionen des Pakets aus dem NuGet-Cache entfernt werden. Es wird empfohlen, diese Option beim Erstellen von C#-Lösungen während der Entwicklung immer zu verwenden, um Fehler zu vermeiden.
Unterstützung von Double-Precision (REAL_T_IS_DOUBLE)¶
Wenn Godot mit Unterstützung für Double-Precision gebaut wird, d.h. mit dem Argument precision=double
für scons, müssen die Managed Libraries angepasst werden, indem das Argument --precision=double
übergeben wird:
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir ./bin --push-nupkgs-local <my_local_source> --precision=double
Beispiele¶
Beispiel (Windows)¶
# Build editor binary
scons p=windows target=editor module_mono_enabled=yes
# Build export templates
scons p=windows target=template_debug module_mono_enabled=yes
scons p=windows target=template_release module_mono_enabled=yes
# Generate glue sources
bin/godot.windows.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Build .NET assemblies
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=windows
Beispiel (Linux, *BSD)¶
# Build editor binary
scons p=linuxbsd target=editor module_mono_enabled=yes
# Build export templates
scons p=linuxbsd target=template_debug module_mono_enabled=yes
scons p=linuxbsd target=template_release module_mono_enabled=yes
# Generate glue sources
bin/godot.linuxbsd.editor.x86_64.mono --headless --generate-mono-glue modules/mono/glue
# Generate binaries
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd
Datenverzeichnis¶
Das Datenverzeichnis ist eine Abhängigkeit für Godot-Binärdateien, die mit aktiviertem .NET-Modul erstellt wurden. Es enthält wichtige Dateien für das korrekte Funktionieren von Godot. Es muss zusammen mit der ausführbaren Godot-Datei veröffentlichen werden.
Editor¶
Der Name des Datenverzeichnisses für den Godot-Editor wird immer GodotSharp
lauten. Dieses Verzeichnis enthält ein Api
-Unterverzeichnis mit den Godot-API-Assemblies und ein Tools
-Unterverzeichnis mit den vom Editor benötigten Tools, wie den GodotTools
-Assemblies und deren Abhängigkeiten.
Unter macOS kann, wenn der Godot-Editor als Bundle veröffentlichen wird, das GodotSharp
-Verzeichnis in das <bundle_name>.app/Contents/Resources/
-Verzeichnis innerhalb des Bundles gelegt werden.
Exportvorlagen¶
Das Datenverzeichnis für exportierte Projekte wird vom Editor während des Exports erzeugt. Es heißt data_<APPNAME>_<ARCH>
, wobei <APPNAME>
der Anwendungsname ist, wie er in der Projekteinstellung application/config/name
angegeben ist, und <ARCH>
die aktuelle Architektur des Exports ist.
Im Falle von Exporten mit mehreren Architekturen werden mehrere solcher Datenverzeichnisse erstellt.
Kommandozeilenoptionen¶
Im Folgenden finden Sie eine Liste der Kommandozeilenoptionen, die bei der Erstellung mit dem .NET-Modul verfügbar sind:
module_mono_enabled=yes | no
Bauen von Godot mit aktiviertem .NET-Modul.