Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Wut-Zustand | Feindverhalten
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
Wut-Zustand

public class RageState : State
{
    Animator animator;
    System.Action addHealth;
    System.Action changingAttackDmg;

    public RageState(Animator animator, System.Action addHealth, System.Action changeAttack)
    {
        this.animator = animator;
        this.addHealth = addHealth;
        changingAttackDmg = changeAttack;
    }

    public override void StartState()
    {
        animator.SetBool("rage", true);
        isStateFinished = false;
        changingAttackDmg(); // add the enemy dmg after raging
    }

    public override void UpdateState(float deltaTime)
    {
        addHealth();
    }

    public override void EndState()
    {
        animator.SetBool("rage", false);
    }
}

Erklärung der RageState-Klasse

Die RageState-Klasse ist ein spezifischer Zustand, der das Verhalten des Gegners steuert, wenn dieser in den Wutmodus wechselt. Diese Klasse erbt von der State-Klasse und enthält Methoden zum Starten, Aktualisieren und Beenden des Wutzustands. Außerdem sind Aktionen enthalten, um im Wutmodus Lebenspunkte hinzuzufügen und den Angriffsschaden zu verändern.

Klassendefinition und Membervariablen

Klassendefinition:

public class RageState : State Diese Klasse erbt von der State-Klasse, was bedeutet, dass sie die abstrakten Methoden aus State implementieren muss.

Membervariablen:

Animator animator; Steuert die Animationen.
System.Action addHealth; Eine Aktion, um dem Gegner Lebenspunkte hinzuzufügen.
System.Action changingAttackDmg; Eine Aktion, um den Angriffsschaden des Gegners zu verändern.

Konstruktor

Der Konstruktor initialisiert den RageState mit den erforderlichen Komponenten: einem Animator für Animationen sowie zwei Aktionen zum Hinzufügen von Gesundheit und zum Ändern des Angriffsschadens. Diese Werte werden den entsprechenden Member-Variablen zugewiesen.

StartState-Methode

Diese Methode setzt isStateFinished auf false, löst die Rage-Animation aus, indem der boolesche Parameter "rage" im Animator auf true gesetzt wird, und ruft changingAttackDmg auf, um den Schaden des Gegners zu erhöhen.

UpdateState-Methode

Diese Methode wird in jedem Frame aufgerufen und ruft addHealth auf, um dem Gegner während des Rage-Zustands kontinuierlich Gesundheit hinzuzufügen.

EndState-Methode

Diese Methode stoppt die Rage-Animation, indem der boolesche Parameter "rage" im Animator auf false gesetzt wird.

Warum wir es so umgesetzt haben

Verbesserte Gegnerverhalten;

Der RageState verbessert das Verhalten des Gegners, indem er dessen Angriffsschaden erhöht und kontinuierlich Lebenspunkte hinzufügt, wodurch der Gegner für den Spieler herausfordernder wird; Die Verwendung von Aktionen (System.Action) ermöglicht flexible und modulare Anpassungen der Gegnerattribute.

Dynamisches und fesselndes Gameplay:

Durch das Einführen eines Rage-Zustands beim Gegner wird das Gameplay dynamischer und fesselnder, da sich der Spieler an einen stärkeren und widerstandsfähigeren Gegner anpassen muss.

Funktionsweise im Kontext

Betreten des Rage-Zustands: Wenn der Gegner in den RageState wechselt, wird die Methode StartState aufgerufen, die die Rage-Animation auslöst und den Angriffsschaden des Gegners erhöht.

Während des Rage-Zustands: Die Methode UpdateState wird in jedem Frame aufgerufen. Sie fügt dem Gegner kontinuierlich Lebenspunkte hinzu, wodurch es für den Spieler schwieriger wird, den Gegner zu besiegen.

Verlassen des Rage-Zustands: Wenn der Gegner den RageState verlässt, wird die Methode EndState aufgerufen, die die Rage-Animation stoppt.

Durch diese Strukturierung des RageState stellen wir sicher, dass der Gegner deutlich stärker und widerstandsfähiger werden kann, was dem Spieler eine größere Herausforderung bietet und das gesamte Spielerlebnis verbessert.

Rage-Zustand initialisieren

rage = new RageState(animator, () => { health += 10f * Time.deltaTime; }, () => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); });

Erklärung

Initialisierung des RageState:

rage = new RageState(animator, (...) => {...}, (...) => {...}); Erstellt eine neue RageState-Instanz mit dem Namen rage;

Animator:

animator: Übergibt den Animator zur Steuerung der Animationen;

Erhöhung der Gesundheit:

() => { health += 10f * Time.deltaTime; } Eine Lambda-Funktion, die die Gesundheit pro Sekunde um 10 Einheiten erhöht;

Änderung des Angriffsschadens:

() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); } Eine Lambda-Funktion, die den Angriffsschaden von attack1 auf 15 und von attack2 auf 25 setzt.

Rage-Übergang

rageTransition = new Transition(() =>
{
    if (health <= 40f && haveRaged == false)
    {
        haveRaged = true;
        return true;
    }
    return false;
}, new StatePourcentage(rage, 100f));

Die rageTransition ist eine Transition, die den Gegner in einen RageState versetzt, wenn bestimmte Bedingungen erfüllt sind. Diese Transition wurde entwickelt, um den Gegner gefährlicher zu machen, sobald seine Gesundheit unter einen bestimmten Schwellenwert fällt und er sich noch nicht im Rage-Zustand befindet.

Transition-Definition

Bedingung:

Die Transition prüft, ob die Gesundheit des Gegners kleiner oder gleich 40 ist und ob der Gegner den Rage-Zustand noch nicht betreten hat (haveRaged ist false). Wenn beide Bedingungen erfüllt sind, wird haveRaged auf true gesetzt, um sicherzustellen, dass der Gegner den Rage-Zustand nur einmal betritt, und es wird true zurückgegeben, um die Transition auszulösen.

State Pourcentage:

Die Transition verwendet new StatePourcentage(rage, 100f), um anzugeben, dass der Gegner beim Eintreten der Bedingung mit 100% Wahrscheinlichkeit in den RageState übergeht.

Warum wir es so gemacht haben

Auslösen von mächtigem Verhalten: Die rageTransition ermöglicht es dem Gegner, bei kritisch niedriger Gesundheit stärker zu werden und stellt so eine größere Herausforderung für den Spieler dar. Diese Transition stellt sicher, dass der Gegner den Rage-Zustand nur einmal betritt und verhindert wiederholte Übergänge in diesen Zustand.

Dynamisches und herausforderndes Gameplay: Durch die Einführung des Rage-Zustands bei kritischer Gesundheit wird das Gameplay dynamischer und anspruchsvoller, sodass der Spieler seine Strategie anpassen muss.

Funktionsweise im Kontext

Gesundheitsüberprüfung: Während des Spiels wird die Gesundheit des Gegners überwacht, wenn er Schaden erleidet. Sinkt die Gesundheit des Gegners auf 40 oder weniger und ist er noch nicht in Rage verfallen, wird die Bedingung rageTransition erfüllt.

Auslösen des Rage-Zustands: Sobald die Bedingung erfüllt ist, wird haveRaged auf true gesetzt und der Übergang in den RageState wird mit einer Wahrscheinlichkeit von 100 % ausgelöst.

Eintreten in den Rage-Zustand: Der RageState wird aktiviert, wodurch der Angriffsschaden des Gegners erhöht und kontinuierlich Gesundheit hinzugefügt wird, was den Gegner deutlich schwerer besiegbar macht.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 8

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
Wut-Zustand

public class RageState : State
{
    Animator animator;
    System.Action addHealth;
    System.Action changingAttackDmg;

    public RageState(Animator animator, System.Action addHealth, System.Action changeAttack)
    {
        this.animator = animator;
        this.addHealth = addHealth;
        changingAttackDmg = changeAttack;
    }

    public override void StartState()
    {
        animator.SetBool("rage", true);
        isStateFinished = false;
        changingAttackDmg(); // add the enemy dmg after raging
    }

    public override void UpdateState(float deltaTime)
    {
        addHealth();
    }

    public override void EndState()
    {
        animator.SetBool("rage", false);
    }
}

Erklärung der RageState-Klasse

Die RageState-Klasse ist ein spezifischer Zustand, der das Verhalten des Gegners steuert, wenn dieser in den Wutmodus wechselt. Diese Klasse erbt von der State-Klasse und enthält Methoden zum Starten, Aktualisieren und Beenden des Wutzustands. Außerdem sind Aktionen enthalten, um im Wutmodus Lebenspunkte hinzuzufügen und den Angriffsschaden zu verändern.

Klassendefinition und Membervariablen

Klassendefinition:

public class RageState : State Diese Klasse erbt von der State-Klasse, was bedeutet, dass sie die abstrakten Methoden aus State implementieren muss.

Membervariablen:

Animator animator; Steuert die Animationen.
System.Action addHealth; Eine Aktion, um dem Gegner Lebenspunkte hinzuzufügen.
System.Action changingAttackDmg; Eine Aktion, um den Angriffsschaden des Gegners zu verändern.

Konstruktor

Der Konstruktor initialisiert den RageState mit den erforderlichen Komponenten: einem Animator für Animationen sowie zwei Aktionen zum Hinzufügen von Gesundheit und zum Ändern des Angriffsschadens. Diese Werte werden den entsprechenden Member-Variablen zugewiesen.

StartState-Methode

Diese Methode setzt isStateFinished auf false, löst die Rage-Animation aus, indem der boolesche Parameter "rage" im Animator auf true gesetzt wird, und ruft changingAttackDmg auf, um den Schaden des Gegners zu erhöhen.

UpdateState-Methode

Diese Methode wird in jedem Frame aufgerufen und ruft addHealth auf, um dem Gegner während des Rage-Zustands kontinuierlich Gesundheit hinzuzufügen.

EndState-Methode

Diese Methode stoppt die Rage-Animation, indem der boolesche Parameter "rage" im Animator auf false gesetzt wird.

Warum wir es so umgesetzt haben

Verbesserte Gegnerverhalten;

Der RageState verbessert das Verhalten des Gegners, indem er dessen Angriffsschaden erhöht und kontinuierlich Lebenspunkte hinzufügt, wodurch der Gegner für den Spieler herausfordernder wird; Die Verwendung von Aktionen (System.Action) ermöglicht flexible und modulare Anpassungen der Gegnerattribute.

Dynamisches und fesselndes Gameplay:

Durch das Einführen eines Rage-Zustands beim Gegner wird das Gameplay dynamischer und fesselnder, da sich der Spieler an einen stärkeren und widerstandsfähigeren Gegner anpassen muss.

Funktionsweise im Kontext

Betreten des Rage-Zustands: Wenn der Gegner in den RageState wechselt, wird die Methode StartState aufgerufen, die die Rage-Animation auslöst und den Angriffsschaden des Gegners erhöht.

Während des Rage-Zustands: Die Methode UpdateState wird in jedem Frame aufgerufen. Sie fügt dem Gegner kontinuierlich Lebenspunkte hinzu, wodurch es für den Spieler schwieriger wird, den Gegner zu besiegen.

Verlassen des Rage-Zustands: Wenn der Gegner den RageState verlässt, wird die Methode EndState aufgerufen, die die Rage-Animation stoppt.

Durch diese Strukturierung des RageState stellen wir sicher, dass der Gegner deutlich stärker und widerstandsfähiger werden kann, was dem Spieler eine größere Herausforderung bietet und das gesamte Spielerlebnis verbessert.

Rage-Zustand initialisieren

rage = new RageState(animator, () => { health += 10f * Time.deltaTime; }, () => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); });

Erklärung

Initialisierung des RageState:

rage = new RageState(animator, (...) => {...}, (...) => {...}); Erstellt eine neue RageState-Instanz mit dem Namen rage;

Animator:

animator: Übergibt den Animator zur Steuerung der Animationen;

Erhöhung der Gesundheit:

() => { health += 10f * Time.deltaTime; } Eine Lambda-Funktion, die die Gesundheit pro Sekunde um 10 Einheiten erhöht;

Änderung des Angriffsschadens:

() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); } Eine Lambda-Funktion, die den Angriffsschaden von attack1 auf 15 und von attack2 auf 25 setzt.

Rage-Übergang

rageTransition = new Transition(() =>
{
    if (health <= 40f && haveRaged == false)
    {
        haveRaged = true;
        return true;
    }
    return false;
}, new StatePourcentage(rage, 100f));

Die rageTransition ist eine Transition, die den Gegner in einen RageState versetzt, wenn bestimmte Bedingungen erfüllt sind. Diese Transition wurde entwickelt, um den Gegner gefährlicher zu machen, sobald seine Gesundheit unter einen bestimmten Schwellenwert fällt und er sich noch nicht im Rage-Zustand befindet.

Transition-Definition

Bedingung:

Die Transition prüft, ob die Gesundheit des Gegners kleiner oder gleich 40 ist und ob der Gegner den Rage-Zustand noch nicht betreten hat (haveRaged ist false). Wenn beide Bedingungen erfüllt sind, wird haveRaged auf true gesetzt, um sicherzustellen, dass der Gegner den Rage-Zustand nur einmal betritt, und es wird true zurückgegeben, um die Transition auszulösen.

State Pourcentage:

Die Transition verwendet new StatePourcentage(rage, 100f), um anzugeben, dass der Gegner beim Eintreten der Bedingung mit 100% Wahrscheinlichkeit in den RageState übergeht.

Warum wir es so gemacht haben

Auslösen von mächtigem Verhalten: Die rageTransition ermöglicht es dem Gegner, bei kritisch niedriger Gesundheit stärker zu werden und stellt so eine größere Herausforderung für den Spieler dar. Diese Transition stellt sicher, dass der Gegner den Rage-Zustand nur einmal betritt und verhindert wiederholte Übergänge in diesen Zustand.

Dynamisches und herausforderndes Gameplay: Durch die Einführung des Rage-Zustands bei kritischer Gesundheit wird das Gameplay dynamischer und anspruchsvoller, sodass der Spieler seine Strategie anpassen muss.

Funktionsweise im Kontext

Gesundheitsüberprüfung: Während des Spiels wird die Gesundheit des Gegners überwacht, wenn er Schaden erleidet. Sinkt die Gesundheit des Gegners auf 40 oder weniger und ist er noch nicht in Rage verfallen, wird die Bedingung rageTransition erfüllt.

Auslösen des Rage-Zustands: Sobald die Bedingung erfüllt ist, wird haveRaged auf true gesetzt und der Übergang in den RageState wird mit einer Wahrscheinlichkeit von 100 % ausgelöst.

Eintreten in den Rage-Zustand: Der RageState wird aktiviert, wodurch der Angriffsschaden des Gegners erhöht und kontinuierlich Gesundheit hinzugefügt wird, was den Gegner deutlich schwerer besiegbar macht.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 8
some-alt