Unser Spiel wird immer lebendiger! Wir haben Soundeffekte und zusätzliche Animationen hinzugefügt, um das Einsammeln von Münzen noch befriedigender zu machen. Doch wir können noch einen Schritt weiter gehen, um visuelles Feedback zu verbessern: mit Partikeleffekten.
Partikeleffekte können einem Spiel unheimlich viel Leben einhauchen. Sie sind perfekt, um kurze, dynamische visuelle Ereignisse darzustellen, wie Explosionen, Rauch, Funken oder eben das Aufsammeln einer Münze.
In diesem Artikel wirst du:
- Das Konzept von Partikelsystemen in Godot kennenlernen.
- Den
GPUParticles2D
Node verwenden, um einen Partikeleffekt für unsere Münze zu erstellen. - Die verschiedenen Eigenschaften eines Partikelsystems konfigurieren
- Den Partikeleffekt über unser Script auslösen, wenn eine Münze eingesammelt wird.
Was sind Partikelsysteme in Godot?
In Godot erstellst du Partikeleffekte meist mit einem GPUParticles2D
Node (für 2D-Spiele). Dieser Node allein macht noch nichts. Er benötigt zwei Hauptkomponenten, um Partikel zu erzeugen und zu steuern:
- Texture: Das ist das Bild, das für jeden einzelnen Partikel verwendet wird (oft ein kleiner Kreis, Stern, Punkt, etc.).
- ProcessMaterial: Eine Ressource, die definiert, wie sich die Partikel über ihre Lebenszeit verhalten (Geschwindigkeit, Richtung, Schwerkraft, Farbe, Größe etc.).
Darauf achten: CPUParticles2D vs. GPUParticles2D
- CPUParticles2D: Auf dem Prozessor berechnet. Gut für wenige Partikel oder individuelle Kontrolle. Langsam bei vielen. Wird jedoch seitend Godot nicht mehr aktiv weiterentwickelt.
- GPUParticles2D: Auf der Grafikkarte berechnet. Sehr schnell für viele Partikel (Zehntausende). Weniger direkte Code-Kontrolle (oft Shader nötig).
Empfehlung: Nimm GPUParticles2D für die meisten Effekte; CPUParticles2D nur für spezielle Fälle mit wenigen Partikeln und volle Partikelkontrolle per Code notwendig.
Schritt 1: Partikel-Effekt zur Münze hinzufügen
Diese Partikel sollen von der Münze ausgehen, wenn sie eingesammelt wird. Der CPUParticles2D
Node gehört also in die Coin-Scene.
- Öffne deine Szene
coin.tscn
. - Wähle im Scene Dock den Root-Node Coin (
Area2D
) aus. - Füge als Kind einen
GPUParticles2D
Node hinzu. Klicke auf den „+“ Button (Child Node hinzufügen), sucheGPUParticles2D
und klicke „Create“. Benenne ihn zum Beispiel inCollectParticles
um.
Schritt 2: Den Partikeleffekt konfigurieren
Nachdem wir den GPUParticles2D
Node hinzugefügt haben, müssen wir ihn im Inspector konfigurieren, um das gewünschte Verhalten zu erzielen.
- Wähle den
CollectParticles
Node im Scene Dock aus und gehe in den Inspector. Hier konfigurieren wir das System:- Emitting: Deaktiviere das Häkchen. Wir wollen die Partikel per Script starten, nicht dauerhaft emittieren.
- Amount: Die Anzahl der Partikel, die bei einem „Schuss“ erzeugt werden (z.B. 25).
- Time -> Lifetime: Wie lange jedes einzelne Partikel existiert (z.B.
1.0
Sekunden). - Time -> One Shot: Aktiviere das Häkchen. Das sorgt dafür, dass die Partikel nur einmalig als „Burst“ ausgesendet werden, wenn
Emitting
vonfalse
auftrue
wechselt. - Drawing -> Visibility Rect
- Process Material: Klicke auf das leere Feld -> „New ParticleProcessMaterial“. Klicke dann auf die neu erstellte Ressource, um ihre Eigenschaften zu öffnen.
- ParticleProcessMaterial Eigenschaften: Hier kannst du das Verhalten der Partikel einstellen. Experimentiere später damit! Für jetzt:
- Spawn -> Position -> Emission Shape: Fläche, auf der die Partikel entstehen. Wähle Sphere.
- Spawn -> Position -> Emission Sphere Radius: Die größe des Emmision Shapes (z. B. 48, was die Größe unserer Münze entspricht.
- Spawn -> Velocity -> Spread: Die Streuung der Partikel. 180 bedeutet in alle Richtungen, 0 in einem Halbkreis (z. B. 180.).
- Accelerations -> Gravity: Setze „Gravity“ auf
(0, 0)
, damit die Partikel nicht nach unten fallen. - Accelerations -> Radial Accel: Legt die kreisförmige Beschleunigung fest. Da wir eine runde Münze haben, ist dies hier passend (z.B. min: 50; max: 150)
- Display -> Scale: Größe der einzelnen Partikel (z.B. min: 0,05; max 0,1)
- Scale: Setze z.B. „Scale Min“ und „Scale Max“ auf
0.5
und1.0
, damit die Partikel eine zufällige Größe haben. - Texture: Gehe zurück im Inspector zum
CollectParticles
Node. Suche die Eigenschaft „Texture“. Klicke auf das leere Feld -> „Load“. Wähle eine kleine Textur für die Partikel aus. Einr einfache weiße Stern-Grafik (z.B. star_06.png von OpenGameArt.org, hier muss der schwarze Hintergrund allerdings in transparent geändert werden) funktioniert gut.- Wählst du keine Textur aus, werden kleine Würfel als Partikel erzeugt. Diese kannst du dann via Display -> Scale in der Größe anpassen (z.B. min: 0,15; max 0,3).
- ParticleProcessMaterial Eigenschaften: Hier kannst du das Verhalten der Partikel einstellen. Experimentiere später damit! Für jetzt:
Schritt 3: Partikel im Script auslösen
Jetzt verbinden wir den Partikeleffekt mit dem Einsammeln der Münze in unserem coin.gd
Script.
- Öffne das Skript
coin.gd
. - Füge eine
@onready
Variable für den Partikel-Node hinzu, damit wir ihn im Script referenzieren können:
1 2 3 4 5 6 7 8 |
class_name Coin extends Area2D # Deklariere ein neues Signal, das ausgesendet wird, wenn die Münze eingesammelt wird. signal collected @onready var collect_sound = $CollectSound @onready var collect_particles = $CollectParticles # ... (Deine bestehenden Funktionen) ... |
Gehe zur Funktion _on_Coin_body_entered(body)
. Innerhalb des if body.is_in_group("players"):
Blocks, füge den Code ein, um die Partikel zu starten, nachdem der Sound abgespielt wurde und bevor die Münze entfernt wird.
Dein _on_Coin_body_entered
sollte nun so aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class_name Coin extends Area2D # (...) func _on_Coin_body_entered(body): if body.is_in_group("players"): print("Münze berührt!") # --- Partikel starten --- collect_particles.emitting = true # Startet den Partikel-Burst emit_signal("collected") collect_sound.play() animation.hide() # nur die Animation verstecken, nicht den gesamten Node await collect_sound.finished queue_free() # Jetzt die Münze entfernen |
Darauf achten: emitting = true
für One Shot
Partikel
Da wir die One Shot
-Eigenschaft im ProcessMaterial
des GPUParticles2D
aktiviert haben, wird der Partikeleffekt nur einmal als „Burst“ ausgesendet, wenn wir emitting
von false
auf true
setzen. Die Partikel werden dann ihre Lifetime
lang existieren und verschwinden. Dies ist ideal für einmalige Effekte wie das Einsammeln unserer Münze.
Darauf achten: hide() versteckt auch die Partikel
Damit wir die Partikel auch sehen können, dürfen wir nicht mehr einfach nur den Node verstecken (vorher: hide()
), sondern wie verstecken lediglich die Animation. Der Node wird erst zerstört, wenn der Soundeffekt fertig abgespielt ist (await collect_sound.finished
). Partikel, die dann noch existieren, werden ebenfalls ausgeblendet.
Schritt 4: Speichern und Ausführen
- Speichere dein
coin.gd
Skript (Strg + S) und die Szenecoin.tscn
(Strg + S). - Führe das Projekt aus (F5).
Ergebnis:
Wenn du nun Münzen einsammelst, sollten dort Partikel erscheinen, die den Effekt des Einsammelns visuell verstärken!
Dein nächster Schritt
Fantastisch! Du hast gelernt, wie man Partikeleffekte in Godot erstellt und steuert. Wir haben nun ein noch dynamischeres Spielerlebnis geschaffen. Du hast gelernt:
- Die Grundlagen des
GPUParticles2D
Nodes. - Wie man eine
ParticleProcessMaterial
konfiguriert, um das Verhalten der Partikel zu steuern (Geschwindigkeit, Größe, Lebenszeit, etc.). - Wie man Partikel-Texturen zuweist.
- Wie man
One Shot
-Partikel per Script auslöst.
Als Nächstes werden wir unserem Spiel ein grundlegendes User Interface (UI) hinzufügen, um den Fortschritt unserer Spieler:innen anzuzeigen. Wir erstellen ein HUD (Heads-Up Display), das die Anzahl der gesammelten Münzen darstellt. Das führt uns in die Welt der Control Nodes und wie wir Text und Zahlen auf dem Bildschirm aktualisieren können.