Godot Engine und .NET
In diesem Artikel zeige ich euch wie man ein neues Godot Projekt mit C# aufsetzt. Die komplette Konfiguration für Visual Studio Code und wie der Debugger funktioniert.
Godot Engine und .NET
Godot ist eine freie Game Engine und ermöglicht die Entwicklung von interaktiven Anwendungen unabhängig vom Betriebssystem und der Plattform. Ein fertiges Projekt kann man sowohl auf dem PC, einem Smartphone oder einer Konsole deployen. In der Basisausführung bietet Godot eine eigene Scriptsprache (GDScript), da ich aber als .NET Entwickler lieber meinen eigenen Editor und ein bekanntes Ökosystem verwende ich die alternative Version Godot.NET. Im folgenden erkläre ich Schritt für Schritt wie man vom Download der Engine bis zum fertigen Toolset kommt. Man dieses direkt nutzen um das eigene Projekt umzusetzen.
Setup
Die aktuelle Version der Godot Engine (aktuell 4.4) kann man sich auf der Homepage herunterladen. Es gibt zwei unterschiedliche Versionen, ich bespreche in diesem Artikel die etwas unscheinbarere Version der Engine für .NET (zweiter Button).
Als nächstes Entpackt man den Download in einen Ordner. Für Engines und 3rd Party Tools habe ich dazu einen eigenen C:\Tools Ordner (alternativ zu C:\Programme). Als nächstes lege ich mir eine Environment Variable an. Warum? Da im Laufe der Entwicklung bestimmt neuere Versionen veröffentlicht werden muss man das Toolset nicht neu konfigurieren. Man passt später einfach den Pfad in den Environment Variablen für die neue Version an. Das funktioniert so: System Properties (Systemeinstellungen) öffnen und den Dialog Environment Variables (Umgebungsvariablen) öffnen. Mit Neu generiert man einen Namen z.B.: „GODOT“ und weißt als Wert den Link zur *.exe der zu verwendenden Engine zu.
Visual Studio Code
Ich gehe davon aus der universell einsetzbare Editor Visual Studio Code ist bereits installiert. Falls nicht findet man diesen zum Beispiel im Microsoft Store. VS Code lässt sich durch Extensions an die Bedürfnisse anpassen, die Extensions C# und C# Tools for Godot sind das Minimum.
Godot Editor
Die über die Umgebungsvariable *.exe Datei der Engine ist der Godot Editor. Dort kann man GDScript schreiben (was wir in diesem Fall nicht machen) und die Assets des Projekts bearbeiten. Wie bei anderen Game Engines auch gibt es hier unzählige Möglichkeiten. Diese unterscheiden sich aufgrund des Typs des Projekts auch stark (z.B. 2D vs. 3D). An dieser stelle möchte ich auf die sehr gute Dokumentation von Godot verweisen oder jegliche Tutorial Videos auf YouTube.
Im Engine Editor kann man einen externen Editor definieren, dort setzt man Visual Studio Code als Editor für C# Script Dateien:
Toolset Konfiguration
Im folgenden werden die beiden Dateien launch.json und tasks.json erstellt. Diese Befinden sich im .vscode Ordner des Projekts und definieren wie die IDE reagiert, wenn man das Projekt ausführt beziehungsweise debugged. Fertig konfiguriert kann man jederzeit das Projekt bauen und im Debugmodus ausführen. Damit lässen sich Breakpoints setzen und den Code zur Laufzeit debuggen.
Meine tasks.json Datei ist wenig aufregend:
{ "version": "2.0.0", "tasks": [ { "label": "build", "command": "dotnet", "type": "shell", "args": [ "build", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "group": { "kind": "build", "isDefault": true }, "presentation": { "reveal": "silent" }, "problemMatcher": "$msCompile" } ] }
Die launch.json Datei beinhaltet unterschiedliche Möglichkeiten wie man das Projekt ausführen oder debuggen kann:
{ "version": "2.0.0", "configurations": [ { "name": "Launch", "type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "${env:GODOT4}", "cwd": "${workspaceFolder}", "console": "internalConsole", "stopAtEntry": false, "args": [ "--path", "${workspaceRoot}" ] }, { "name": "Launch (Select Scene)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "${env:GODOT4}", "cwd": "${workspaceFolder}", "console": "internalConsole", "stopAtEntry": false, "args": [ "--path", "${workspaceRoot}", "${command:godot.csharp.getLaunchScene}" ] }, { "name": "Launch Editor", "type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "${env:GODOT4}", "cwd": "${workspaceFolder}", "console": "internalConsole", "stopAtEntry": false, "args": [ "--path", "${workspaceRoot}", "--editor" ] }, { "name": "Attach to Process", "type": "coreclr", "request": "attach" } ] }
Die ersten beiden Optionen starten die eine Godot Szene des Projekts. Das ist entweder die „default“ Szene oder eine die man explizit angibt. Im zweiten Fall kann man so direkt beispielsweise ein beliebiges Level starten, oder ein bestimmtes Menü. Als Type wird eine Kommandozeilenoperation angegeben. Diese Startet die *.exe die über die GODOT Umgebungsvariable (siehe Setup) definiert ist. Je nach Option werden unterschiedliche Kommandozeilenparameter mit angegeben. Die 3. Option führt das Projekt nicht aus, sondern öffnet dieses im Godot Editor. Das Projekt ist in Visual Studio Code fertig konfiguriert.
Verwendung
Verwenden kann man das Toolset nun wie folgt:
- Im Godot Editor neue Skripte anlegen
- Skripte in VS Code bearbeiten
- Projekt starten und debuggen
Wie auf dem Screenshot zu sehen sind die Scripte nun als C# Klassen und *.cs Dateien im Projekt angelegt. Die jeweiligen Scripte lassen sich über einen Klick im Editor (VSCode öffnet sich) oder aber auch direkt im VS Code ohne, dass der Godot Editor offen sein muss bearbeiten.
Fazit
Godot ist eine tolle Game Engine und ist dank der .NET Option auch für mich relevant. Meiner Meinung macht die Entwicklung in VS Code und mittels .NET wesentlich mehr Spaß. Als Software Entwickler hat man oft nicht die nötige Motivation noch eine weitere Skriptsprache wie GDScript zu lernen. Mir sind bisher in meinem Projekt keine negativen Effekte aufgefallen die gegen die Verwendung von .NET gegenüber GDScript sprechen. Offenbar gab es in früheren Versionen Probleme, diese dürften mittlerweile alle gelöst sein.