Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Wut-Zustand
Erklärung der RageState-Klasse
Die RageState
-Klasse ist ein spezifischer Zustand, der das Verhalten des Feindes steuert, wenn er in den Wutmodus eintritt. Diese Klasse erbt von der State
-Klasse und enthält Methoden, um den Wutzustand zu starten, zu aktualisieren und zu beenden. Sie enthält auch Aktionen, um Gesundheit hinzuzufügen und den Angriffsschaden zu ändern, wenn der Feind im Wutmodus ist.
Klassendefinition und Mitgliedsvariablen
Klassendefinition;
public class RageState : State
Diese Klasse erbt von der State
-Klasse, was bedeutet, dass sie die abstrakten Methoden implementieren muss, die in State
definiert sind.
Mitgliedsvariablen:
Animator animator;
Steuert die Animationen.
System.Action addHealth;
Eine Aktion, um dem Feind Gesundheit hinzuzufügen.
System.Action changingAttackDmg;
Eine Aktion, um den Angriffsschaden des Feindes zu ändern.
Konstruktor
Der Konstruktor initialisiert den RageState
mit den notwendigen Komponenten: einem Animator
für Animationen und zwei Aktionen zum Hinzufügen von Gesundheit und Ändern des Angriffsschadens. Er setzt diese Werte auf die entsprechenden Mitgliedsvariablen.
StartState-Methode
Diese Methode setzt isStateFinished
auf false
, löst die Wutanimation aus, indem sie den "rage"-Boolean-Parameter im Animator auf true
setzt, und ruft changingAttackDmg
auf, um den Schaden des Feindes zu erhöhen.
UpdateState Methode
Diese Methode wird in jedem Frame aufgerufen und ruft addHealth
auf, um dem Feind kontinuierlich Gesundheit hinzuzufügen, während er sich im Rage-Zustand befindet.
EndState Methode
Diese Methode stoppt die Rage-Animation, indem der "rage"-boolesche Parameter im Animator auf false
gesetzt wird.
Warum wir es so gemacht haben
Verbesserte Feindverhalten;
Der RageState
verbessert das Verhalten des Feindes, indem er seinen Angriffsschaden erhöht und kontinuierlich Gesundheit hinzufügt, was es für den Spieler herausfordernder macht;
Die Verwendung von Aktionen (System.Action
) ermöglicht flexible und modulare Änderungen an den Attributen des Feindes.
Dynamisches und fesselndes Gameplay:
Indem der Feind in einen Rage-Zustand versetzt wird, wird das Gameplay dynamischer und fesselnder, da der Spieler sich an den stärkeren und widerstandsfähigeren Feind anpassen muss.
Wie es im Kontext funktioniert
Eintreten in den Rage-Zustand: Wenn der Feind den RageState
betritt, wird die Methode StartState
aufgerufen, die die Rage-Animation auslöst und den Angriffsschaden des Feindes erhöht.
Während der Rage: Die Methode UpdateState
wird in jedem Frame aufgerufen. Sie fügt dem Feind kontinuierlich Gesundheit hinzu, was es dem Spieler erschwert, den Feind zu besiegen.
Verlassen des Rage-Zustands: Wenn der Feind den RageState
verlässt, wird die Methode EndState
aufgerufen, die die Rage-Animation stoppt.
Durch die Strukturierung des RageState
auf diese Weise stellen wir sicher, dass der Feind erheblich mächtiger und widerstandsfähiger werden kann, was eine größere Herausforderung für den Spieler darstellt und das gesamte Spielerlebnis verbessert.
Rage-Zustand initialisieren
Erklärung
RageState-Initialisierung:
rage = new RageState(animator, (...) => {...}, (...) => {...});
Erstellt eine neue RageState
-Instanz namens rage
;
Animator:
animator
: Überträgt den Animator zur Steuerung der Animationen;
Gesundheit erhöhen:
() => { health += 10f * Time.deltaTime; }
Eine Lambda-Funktion, die die Gesundheit um 10
Einheiten pro Sekunde erhöht;
Angriffsschaden ändern:
() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); }
Eine Lambda-Funktion, die den Angriffsschaden von attack1
auf 15
und attack2
auf 25
ändert.
Wut-Übergang
Der rageTransition
ist ein Übergang, der den Feind in einen RageState
versetzt, wenn bestimmte Bedingungen erfüllt sind. Dieser Übergang ist so konzipiert, dass der Feind bedrohlicher wird, wenn seine Gesundheit unter einen bestimmten Schwellenwert fällt und er noch nicht in den Wut-Zustand eingetreten ist.
Übergangsdefinition
Bedingung:
Der Übergang überprüft, ob die Gesundheit des Feindes kleiner oder gleich 40 ist und ob der Feind noch nicht in den Wut-Zustand eingetreten ist (haveRaged
ist false
).
Wenn beide Bedingungen erfüllt sind, wird haveRaged
auf true
gesetzt, um sicherzustellen, dass der Feind nur einmal in den Wut-Zustand eintritt, und es wird true
zurückgegeben, um den Übergang auszulösen.
State Pourcentage:
Der Übergang verwendet new StatePourcentage(rage, 100f)
, um anzuzeigen, dass, wenn die Bedingung erfüllt ist, der Feind mit 100% Wahrscheinlichkeit in den RageState
übergeht.
Warum wir es so gemacht haben
Auslösen mächtiger Verhaltensweisen: Der rageTransition
ermöglicht es dem Feind, mächtiger zu werden, wenn seine Gesundheit kritisch niedrig ist, was die Herausforderung für den Spieler erhöht. Dieser Übergang stellt sicher, dass der Feind nur einmal in den Rage-Zustand eintritt, um wiederholte Übergänge in den Rage-Zustand zu verhindern.
Dynamisches und herausforderndes Gameplay: Durch die Einführung des Rage-Zustands unter kritischen Gesundheitsbedingungen wird das Gameplay dynamischer und herausfordernder, was vom Spieler erfordert, seine Strategie anzupassen.
Wie es im Kontext funktioniert
Gesundheitsüberprüfung: Während des Spiels wird die Gesundheit des Feindes überwacht, wenn er Schaden nimmt. Wenn die Gesundheit des Feindes auf 40 oder darunter fällt und er noch nicht in Rage geraten ist, wird die rageTransition
-Bedingung erfüllt.
Auslösen des Rage-Zustands: Sobald die Bedingung erfüllt ist, wird haveRaged
auf true
gesetzt, und der Übergang zum RageState
wird mit 100% Wahrscheinlichkeit ausgelöst.
Eintritt in den Rage-Zustand: Der RageState
wird initiiert, wodurch der Angriffsschaden des Feindes erhöht wird und kontinuierlich Gesundheit hinzugefügt wird, was den Feind erheblich schwieriger zu besiegen macht.
Danke für Ihr Feedback!