Zum Inhalt springen

Eintrag 001

GDScript lernen: mein Einstieg in Godot 4

Thema
Godot
Veröffentlicht
Lesezeit
8 Min.
Getestet mit
Godot 4.7.2

Wenn du GDScript lernen willst, bau ein kleines Projekt und setz dich jeden Tag ein bisschen daran. Kennst du Python, hast du es leichter, weil sich GDScript sehr ähnlich liest. Mir haben dabei die offizielle Godot-Doku und das kostenlose Lernspiel „Learn GDScript From Zero“ am meisten geholfen.

Warum ich GDScript lernen wollte

Zu Godot bin ich gekommen, weil mir der Open-Source-Hintergrund gefallen hat. Godot steht unter der MIT-Lizenz und kostet nichts, auch dann nicht, wenn du später ein Spiel verkaufst. Dazu kam, dass der Einstieg in die Engine leicht ist. Warum ich nach ersten Versuchen mit Unity bei Godot gelandet bin, steht im Beitrag Godot vs. Unity.

Weil ich mich sowieso mit Python beschäftige, hat Godot perfekt gepasst. GDScript, die Programmiersprache von Godot, ist Python sehr ähnlich. Das hat mir den Einstieg deutlich leichter gemacht.

Godot kann auch C#. Wenn du neu im Programmieren bist, empfiehlt die Doku auf der Seite Lernen, mit GDScript zu programmieren (öffnet in neuem Tab) aber selbst GDScript. Mehr zu Godot und meinem eigenen Spiel findest du auf der Godot-Seite.

GDScript und Python: was gleich ist und was nicht

Die Ähnlichkeit siehst du am besten, wenn du dasselbe kleine Programm in beiden Sprachen nebeneinanderlegst. Erst Python:

Code 01 · Python
def begruessen(spieler):
    return "Hallo, " + spieler + "!"

for spieler in ["Mia", "Tom"]:
    print(begruessen(spieler))
Ausgabe
Hallo, Mia!
Hallo, Tom!

In Python geht das mit einem f-String kürzer: f"Hallo, {spieler}!". Wie das funktioniert, steht im Beitrag zu f-Strings.

Und so sieht es in GDScript aus:

Code 02 · GDScript
extends Node

func begruessen(spieler: String) -> String:
	return "Hallo, " + spieler + "!"

func _ready() -> void:
	for spieler in ["Mia", "Tom"]:
		print(begruessen(spieler))

Schleife, return und Einrückung sind fast gleich. Neu ist, dass jedes Skript mit extends beginnt und damit zu einem Node gehört. Außerdem steht der Code, der etwas tun soll, in _ready(). Diese Funktion ruft Godot auf, sobald der Node in der Szene ist. Ein GDScript läuft also nicht einfach von oben nach unten wie ein Python-Skript. Godot entscheidet, wann welche Funktion dran ist.

PunktPythonGDScript
Funktion anlegendef name():func name():
Wann läuft der Code?von oben nach untenwenn Godot Funktionen wie _ready() oder _process() aufruft
Wozu gehört das Skript?steht für sicherweitert einen Node mit extends
Typenoptionaloptional, zum Beispiel spieler: String
Einrückungmeist vier Leerzeichenim Godot-Editor Tabs
Bibliothekenviele Pakete über pipwas Godot mitbringt, dazu Erweiterungen aus der Asset Library

Die Typen wie : String sind freiwillig. Mit ihnen meldet der Editor viele Fehler schon beim Schreiben, deshalb stehen sie in den Beispielen hier. Alles Weitere zur Sprache steht in der Doku unter GDScript-Grundlagen (öffnet in neuem Tab). Wenn du bei Python noch ganz am Anfang stehst, schau auf der Python-Seite vorbei.

Nodes und Szenen: daran musste ich mich erst gewöhnen

Die Sprache war für mich das kleinere Thema. Gewöhnen musste ich mich zuerst an das Node-System.

In Godot ist alles aus Nodes gebaut. Ein Node ist ein Baustein mit einer Aufgabe, ein Sprite2D zeigt zum Beispiel ein Bild und eine Camera2D folgt dem Spieler. Mehrere Nodes zusammen ergeben eine Szene, die du speichern und wiederverwenden kannst.

Dazu kommt, dass fast alles eine Szene ist. Der Player ist eine Szene, jedes Level ist eine Szene, Menüs auch. Eine Player-Szene kann zum Beispiel so aussehen:

Text
Player (CharacterBody2D)
├── Sprite2D
├── CollisionShape2D
└── Camera2D

Ein Level enthält dann eine Instanz dieser Player-Szene. Änderst du den Player, ändert er sich in jedem Level mit. Die Doku erklärt das Prinzip auf der Seite Nodes und Szenen (öffnet in neuem Tab).

Dein erstes Skript: eine Figur bewegen

Hier ein erstes Skript, das wirklich etwas tut: Es bewegt ein Bild mit den Pfeiltasten. Die Namen im Editor stehen so da, wie sie in der englischen Fassung heißen.

Godot-Editor 4.7 auf Englisch: links oben der Szenenbaum mit Player und Sprite2D, links unten das FileSystem mit icon.svg, player.tscn und sprite_2d.gd, in der Mitte das Godot-Logo auf der 2D-Arbeitsfläche, rechts der Inspector mit Texture und Script, unten die Ausgabe. Die Bereiche sind farbig umrandet.
Abb. 01 Das Ergebnis im Editor, die Bereiche farbig umrandet

So sieht das Ergebnis im Editor aus. Rot umrandet sind links oben das Scene-Dock mit dem Szenenbaum und links unten das FileSystem-Dock mit den Dateien des Projekts. Ebenfalls rot ist rechts der Inspector mit den Eigenschaften des ausgewählten Nodes. Blau ist die Arbeitsfläche, gelb unten die Ausgabe. Wenn du anfangs nicht weißt, wo was ist, hilft dieses Bild beim Zurechtfinden.

  1. Leg ein neues Projekt an. Godot erstellt dabei automatisch die Datei icon.svg.
  2. Erstelle eine neue Szene und wähle 2D Scene als Wurzel-Node.
  3. Füge über das Plus-Symbol im Scene-Dock einen Sprite2D als Kind hinzu.
  4. Zieh icon.svg aus dem FileSystem-Dock in das Feld Texture im Inspector.
  5. Klick mit rechts auf den Sprite2D, wähle Attach Script und ersetz den Inhalt durch diesen Code:
Code 03 · GDScript
extends Sprite2D

const GESCHWINDIGKEIT := 200.0

func _process(delta: float) -> void:
	var richtung := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
	position += richtung * GESCHWINDIGKEIT * delta
Skript-Editor in Godot mit dem Bewegungsskript sprite_2d.gd: extends Sprite2D, die Konstante GESCHWINDIGKEIT und die Funktion _process
Abb. 02 Das Bewegungsskript im Skript-Editor

Auf meinem Screenshot ist die lange Zeile mit Input.get_vector() umgebrochen. Das funktioniert genauso, solange der Umbruch innerhalb der Klammer steht.

  1. Speicher die Szene und starte sie mit F6, auf dem Mac mit Cmd+R.

Jetzt bewegt sich das Godot-Logo mit den Pfeiltasten.

_process() ruft Godot in jedem Frame auf, delta ist die Zeit seit dem letzten Frame in Sekunden. Weil die Bewegung mit delta multipliziert wird, ist die Figur auf jedem Rechner gleich schnell, egal wie viele Bilder pro Sekunde er schafft. Mehr dazu steht unter Idle- und Physik-Verarbeitung (öffnet in neuem Tab).

Input.get_vector() (öffnet in neuem Tab) liest vier Tasten und gibt die Richtung als Vektor zurück. ui_left, ui_right, ui_up und ui_down sind Aktionen, die in jedem neuen Projekt schon auf den Pfeiltasten liegen.

Für eine richtige Spielfigur mit Kollisionen nimmt man später einen CharacterBody2D wie im Szenenbaum oben. Für das erste eigene Skript reicht der Sprite2D.

Überfordert am Anfang? Ein kleines Projekt, jeden Tag

Mein erstes Projekt war ein 2D-Sidescroller. Vorher hatte ich mir mehrere Tutorials angesehen. Als ich dann selbst vor Godot saß, war mein Kopf leer. Ich war überfordert von den Möglichkeiten und davon, wo man was findet.

Ich habe dann die Doku geöffnet und Schritt für Schritt ein kleines Level zusammengebaut. Technisch war das nicht sauber, hübsch auch nicht. Aber ich habe dabei viel gelernt.

Wenn du dich täglich an ein kleines Projekt setzt, kommt schnell Routine rein, so war es jedenfalls bei mir. Dann suchst du irgendwann nicht mehr, wo was ist.

Was mir beim Lernen geholfen hat

Am meisten hat mir die offizielle Godot-Doku (öffnet in neuem Tab) geholfen. Ein Teil davon ist sogar ins Deutsche übersetzt. Die Doku sagt selbst, dass je nach Stand der Übersetzung noch Absätze oder ganze Seiten auf Englisch sein können.

Das zweite war „Learn GDScript From Zero“, ein kostenloses Lernspiel von GDQuest. Es führt dich spielerisch an GDScript heran, mit kleinen Übungen, die du direkt in der App löst. Du kannst es im Browser spielen (öffnet in neuem Tab) oder dir die Fassung für Windows und Linux auf itch.io (öffnet in neuem Tab) laden. Das Projekt ist Open Source, und die offizielle Godot-Doku verweist selbst darauf.

Was ich heute anders machen würde

Wenn ich heute neu anfangen würde, würde ich wohl 50 Tutorials weniger schauen. Stattdessen würde ich mir einen guten KI-Tutor an die Seite holen, bei dem ich nachfragen und mich austauschen kann, wenn ich unsicher bin. Ich nutze dafür im Moment Claude.

Anders als bei einem Tutorial fragst du dort genau an der Stelle nach, an der du gerade hängst.

Weitere Beiträge zu Godot und Python findest du im Blog.

Häufige Fragen

Ist GDScript wie Python?

In der Schreibweise sehr ähnlich: Einrückung statt Klammern, for, if und return funktionieren fast gleich. GDScript ist aber eine eigene Sprache, die nur in Godot läuft und Nodes, Signale und Vektoren direkt kennt. Python-Bibliotheken kannst du darin nicht nutzen.

Ist GDScript gut für Anfänger?

Ja. Die offizielle Godot-Doku empfiehlt GDScript ausdrücklich, wenn du neu im Programmieren bist. Die Sprache ist für Godot gebaut, deshalb brauchst du für die ersten Spielmechaniken wenig Code.

Kann ich in Godot Python verwenden?

Nicht offiziell. Godot unterstützt GDScript und C#, dazu C++ über GDExtension. Wer Python kann, kommt mit GDScript aber schnell zurecht, weil sich beide sehr ähnlich lesen.

Welche Programmiersprache nutzt Godot?

Vor allem GDScript, eine eigene Sprache von Godot. Daneben unterstützt Godot C# und über GDExtension auch C++.

Hat dir der Beitrag geholfen?

Fehler gefunden oder eine Frage zum Code? Schreib einen Kommentar oder eine E-Mail.

Kommentare

Du brauchst kein Konto. Name und E-Mail sind freiwillig, die E-Mail-Adresse wird nicht angezeigt. Ich lese jeden Kommentar, bevor er erscheint. Mehr dazu im Datenschutz.

Mehr zu Godot