Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Partikel Hinzufügen | Spiel Verbessern
Kampfspiel in Unity
course content

Kursinhalt

Kampfspiel in Unity

Kampfspiel in Unity

1. Unity-Animationssystem
2. Spielerverhalten
3. Feindverhalten
4. Spiel Verbessern
5. Verbessere das Flappy Bird Spiel

book
Partikel Hinzufügen

Erklärung der Änderungen an der Update-Methode

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

Die Update-Methode im Enemy-Skript enthält nun Logik, um den StateManager zu aktualisieren, sicherzustellen, dass der Gegner dem Spieler zugewandt ist, und einen speziellen Fall zu behandeln, in dem sich der Gegner im DeathState befindet. Diese Logik wurde hinzugefügt, um zu verhindern, dass der Gegner dem Spieler weiterhin zugewandt bleibt, nachdem er gestorben ist.

Komponenten der Methode

StateManager-Update

stateManager.UpdateStates(Time.deltaTime)

Diese Zeile aktualisiert den StateManager und übergibt die seit dem letzten Frame vergangene Zeit (Time.deltaTime). Sie stellt sicher, dass der aktuelle Zustand in jedem Frame korrekt aktualisiert wird.

DeathState-Prüfung

if (stateManager.GetCurrentState() is DeathState) return;

Diese Zeile prüft, ob der aktuelle Zustand DeathState ist. Befindet sich der Gegner im DeathState, wird die Methode vorzeitig beendet, sodass keine weiteren Updates für das Ausrichten zum Spieler oder andere Verhaltensweisen erfolgen.

Ausrichtung zum Spieler

Die folgenden Zeilen sorgen dafür, dass der Gegner immer dem Spieler zugewandt ist:

scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;

scale.x = transform.position.x > player.position.x ? -1 : 1;

Diese Zeile prüft, ob die x-Position des Gegners größer ist als die x-Position des Spielers:

  • Wenn ja, wird scale.x auf -1 gesetzt, sodass der Gegner nach links schaut;
  • Wenn nein, wird scale.x auf 1 gesetzt, sodass der Gegner nach rechts schaut.

transform.localScale = scale;

Diese Zeile wendet den aktualisierten Scale-Wert auf den Transform des Gegners an und stellt sicher, dass er in die richtige Richtung schaut.

Warum wir es so gemacht haben

Behandlung des Todeszustands

Das Hinzufügen der Überprüfung auf DeathState stellt sicher, dass der Gegner nach seinem Tod sein Verhalten oder seine Ausrichtung nicht weiter aktualisiert. Dies ist entscheidend, um die Spiellogik aufrechtzuerhalten und unerwartete Verhaltensweisen zu verhindern, nachdem der Gegner inaktiv sein sollte.

Zentralisierte Logik

Durch das Verschieben der Spieler-Ausrichtungslogik in die Update-Methode wird dieses Verhalten zentralisiert, wodurch Redundanz reduziert und die Wartbarkeit des Codes verbessert wird. Es wird sichergestellt, dass der Gegner den Spieler immer ansieht, unabhängig vom aktuellen Zustand, was zustandsspezifischen Code vereinfacht.

Erklärung der Gegner-Todesbehandlung

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("death", true);
    }

    public override void EndState()
    {
    }
}

Die Klasse DeathState ist ein spezifischer Zustand, der das Verhalten des Gegners beim Tod behandelt.

Warum wir es so gemacht haben

Behandlung des Todesverhaltens

Die Klasse DeathState verwaltet speziell das Verhalten des Gegners beim Tod und stellt sicher, dass die Todesanimation abgespielt und der Zustand als abgeschlossen markiert wird.

Integration der Animation

Durch die Verwendung von Animator-Parametern wird gewährleistet, dass die Todesanimation korrekt mit dem Zustandswechsel synchronisiert ist und ein flüssiges, realistisches Erlebnis bietet.

Partikel beim Tod des Gegners erzeugen

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Dieser Code zeigt, wie der Gegner seinen Tod verarbeitet, wenn seine Gesundheit auf null sinkt. Es erfolgt ein Wechsel in den DeathState und ein Todespartikeleffekt wird abgespielt.

Code-Analyse

Gesundheitsüberprüfung

if (health <= 0)

Diese Bedingung prüft, ob die Gesundheit des Gegners auf null oder darunter gefallen ist.

Übergang zum DeathState

stateManager.ChangeState(deathState)

Diese Zeile versetzt den Gegner mithilfe des DeathState in den StateManager.

Instanziierung der Todespartikel

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Diese Zeile erstellt eine Instanz des Todespartikel-Effekts an der Position des Gegners. deathParticles ist ein Prefab, das das Partikelsystem für den Todeseffekt enthält. Quaternion.identity stellt sicher, dass die Partikel keine Rotation haben.

Abspielen der Todespartikel

deathParticle.Play()

Diese Zeile spielt den instanziierten Partikeleffekt ab.

Zerstörung der Todespartikel

Destroy(deathParticle.gameObject, 5)

Diese Zeile plant die Zerstörung des Partikeleffekt-GameObjects nach 5 Sekunden, damit es nicht dauerhaft im Spiel bleibt.

Warum wir es so gemacht haben

Zustandsverwaltung: Der Übergang in den DeathState stellt sicher, dass das Todesverhalten des Gegners korrekt verwaltet wird und spezifische Logik für den Todeszustand ausgeführt wird.

Visuelle Effekte: Das Abspielen eines Todespartikeleffekts bietet dem Spieler visuelles Feedback und verbessert das Spielerlebnis.

question mark

Was passiert mit dem Partikelsystem, wenn die Gesundheit kleiner oder gleich null ist?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Kampfspiel in Unity

Kampfspiel in Unity

1. Unity-Animationssystem
2. Spielerverhalten
3. Feindverhalten
4. Spiel Verbessern
5. Verbessere das Flappy Bird Spiel

book
Partikel Hinzufügen

Erklärung der Änderungen an der Update-Methode

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

Die Update-Methode im Enemy-Skript enthält nun Logik, um den StateManager zu aktualisieren, sicherzustellen, dass der Gegner dem Spieler zugewandt ist, und einen speziellen Fall zu behandeln, in dem sich der Gegner im DeathState befindet. Diese Logik wurde hinzugefügt, um zu verhindern, dass der Gegner dem Spieler weiterhin zugewandt bleibt, nachdem er gestorben ist.

Komponenten der Methode

StateManager-Update

stateManager.UpdateStates(Time.deltaTime)

Diese Zeile aktualisiert den StateManager und übergibt die seit dem letzten Frame vergangene Zeit (Time.deltaTime). Sie stellt sicher, dass der aktuelle Zustand in jedem Frame korrekt aktualisiert wird.

DeathState-Prüfung

if (stateManager.GetCurrentState() is DeathState) return;

Diese Zeile prüft, ob der aktuelle Zustand DeathState ist. Befindet sich der Gegner im DeathState, wird die Methode vorzeitig beendet, sodass keine weiteren Updates für das Ausrichten zum Spieler oder andere Verhaltensweisen erfolgen.

Ausrichtung zum Spieler

Die folgenden Zeilen sorgen dafür, dass der Gegner immer dem Spieler zugewandt ist:

scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;

scale.x = transform.position.x > player.position.x ? -1 : 1;

Diese Zeile prüft, ob die x-Position des Gegners größer ist als die x-Position des Spielers:

  • Wenn ja, wird scale.x auf -1 gesetzt, sodass der Gegner nach links schaut;
  • Wenn nein, wird scale.x auf 1 gesetzt, sodass der Gegner nach rechts schaut.

transform.localScale = scale;

Diese Zeile wendet den aktualisierten Scale-Wert auf den Transform des Gegners an und stellt sicher, dass er in die richtige Richtung schaut.

Warum wir es so gemacht haben

Behandlung des Todeszustands

Das Hinzufügen der Überprüfung auf DeathState stellt sicher, dass der Gegner nach seinem Tod sein Verhalten oder seine Ausrichtung nicht weiter aktualisiert. Dies ist entscheidend, um die Spiellogik aufrechtzuerhalten und unerwartete Verhaltensweisen zu verhindern, nachdem der Gegner inaktiv sein sollte.

Zentralisierte Logik

Durch das Verschieben der Spieler-Ausrichtungslogik in die Update-Methode wird dieses Verhalten zentralisiert, wodurch Redundanz reduziert und die Wartbarkeit des Codes verbessert wird. Es wird sichergestellt, dass der Gegner den Spieler immer ansieht, unabhängig vom aktuellen Zustand, was zustandsspezifischen Code vereinfacht.

Erklärung der Gegner-Todesbehandlung

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("death", true);
    }

    public override void EndState()
    {
    }
}

Die Klasse DeathState ist ein spezifischer Zustand, der das Verhalten des Gegners beim Tod behandelt.

Warum wir es so gemacht haben

Behandlung des Todesverhaltens

Die Klasse DeathState verwaltet speziell das Verhalten des Gegners beim Tod und stellt sicher, dass die Todesanimation abgespielt und der Zustand als abgeschlossen markiert wird.

Integration der Animation

Durch die Verwendung von Animator-Parametern wird gewährleistet, dass die Todesanimation korrekt mit dem Zustandswechsel synchronisiert ist und ein flüssiges, realistisches Erlebnis bietet.

Partikel beim Tod des Gegners erzeugen

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Dieser Code zeigt, wie der Gegner seinen Tod verarbeitet, wenn seine Gesundheit auf null sinkt. Es erfolgt ein Wechsel in den DeathState und ein Todespartikeleffekt wird abgespielt.

Code-Analyse

Gesundheitsüberprüfung

if (health <= 0)

Diese Bedingung prüft, ob die Gesundheit des Gegners auf null oder darunter gefallen ist.

Übergang zum DeathState

stateManager.ChangeState(deathState)

Diese Zeile versetzt den Gegner mithilfe des DeathState in den StateManager.

Instanziierung der Todespartikel

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Diese Zeile erstellt eine Instanz des Todespartikel-Effekts an der Position des Gegners. deathParticles ist ein Prefab, das das Partikelsystem für den Todeseffekt enthält. Quaternion.identity stellt sicher, dass die Partikel keine Rotation haben.

Abspielen der Todespartikel

deathParticle.Play()

Diese Zeile spielt den instanziierten Partikeleffekt ab.

Zerstörung der Todespartikel

Destroy(deathParticle.gameObject, 5)

Diese Zeile plant die Zerstörung des Partikeleffekt-GameObjects nach 5 Sekunden, damit es nicht dauerhaft im Spiel bleibt.

Warum wir es so gemacht haben

Zustandsverwaltung: Der Übergang in den DeathState stellt sicher, dass das Todesverhalten des Gegners korrekt verwaltet wird und spezifische Logik für den Todeszustand ausgeführt wird.

Visuelle Effekte: Das Abspielen eines Todespartikeleffekts bietet dem Spieler visuelles Feedback und verbessert das Spielerlebnis.

question mark

Was passiert mit dem Partikelsystem, wenn die Gesundheit kleiner oder gleich null ist?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 1
some-alt