Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Zustandsmanager Erstellen
Zustand:
Abstrakte Methoden:
public abstract void StartState();
public abstract void EndState();
sind abstrakte Methoden.
Eine abstrakte Methode hat hier keinen Körper (Implementierung) und muss von jeder nicht-abstrakten Klasse, die von dieser State
-Klasse erbt, implementiert werden.
Virtuelle Methode:
public virtual void UpdateState() {}
ist eine virtuelle Methode.
Eine virtuelle Methode hat eine Implementierung (in diesem Fall einen leeren Körper {}
), kann aber von abgeleiteten Klassen überschrieben werden, wenn sie ein anderes Verhalten benötigen.
Wie es für unseren Feind funktioniert
Zustandsvererbung:
Die State
-Klasse wird von anderen spezifischen Zuständen geerbt. Zum Beispiel könnten wir Klassen wie IdleState
, AttackState
und PatrolState
haben, die von State
erben.
Jeder dieser Zustände wird seine eigenen Versionen von StartState()
, UpdateState()
und EndState()
implementieren.
Verhalten des Feindes:
Das Verhalten des Feindes wird durch Zustände gesteuert, wobei StartState()
den Zustand initialisiert, UpdateState()
das Verhalten während des Zustands aktualisiert und EndState()
nach dem Ende des Zustands aufräumt.
Verwendung der abstrakten Klasse:
Indem State
eine abstrakte Klasse ist, wird sichergestellt, dass alle spezifischen Zustände notwendige Methoden implementieren, das Verhalten des Feindes organisieren und die Zustandsverwaltung vereinfachen, ohne das Feindskript zu ändern.
Zustandsmanager:
Erklärung
Der Konstruktor public StateManager(State startingState)
initialisiert den StateManager
mit einem Startzustand. Er setzt currentState
auf startingState
und ruft currentState.StartState()
auf, um ihn zu initialisieren.
Die Methode ChangeState
, public void ChangeState(State newState)
, ändert den Zustand des Gegners. Sie ruft currentState.EndState()
auf, um den aktuellen Zustand zu bereinigen, setzt currentState
auf den neuen Zustand und ruft dann currentState.StartState()
auf, um den neuen Zustand zu initialisieren.
Die Methode UpdateStates
, public void UpdateStates()
, aktualisiert den aktuellen Zustand, indem sie currentState.UpdateState()
aufruft, um die mit diesem Zustand verbundenen Aktionen auszuführen.
Wie es für unseren Gegner funktioniert
Wenn wir einen StateManager
für unseren Gegner erstellen, initialisiert der Konstruktor den Startzustand. Wenn der Gegner sein Verhalten ändern muss, wird die Methode ChangeState
aufgerufen, die den aktuellen Zustand mit EndState()
beendet, den neuen Zustand setzt und ihn mit StartState()
initialisiert. Während des Spiels wird die Methode UpdateStates
wiederholt aufgerufen, um die Aktionen des aktuellen Zustands über UpdateState()
auszuführen.
Beispielablauf:
Der Feind beginnt in einem IdleState
, wobei der StateManager
erstellt und IdleState.StartState()
aufgerufen wird, um das Leerlaufverhalten einzurichten. Wenn der Feind den Spieler entdeckt, wird ChangeState(new AttackState())
aufgerufen, wodurch das Leerlaufverhalten mit IdleState.EndState()
beendet wird. Der aktuelle Zustand wird dann auf AttackState
gesetzt, und AttackState.StartState()
initiiert das Angriffsverhalten.
Jeden Frame wird UpdateStates()
aufgerufen, und wenn der aktuelle Zustand AttackState
ist, übernimmt AttackState.UpdateState()
die Angriffsaktionen.
Durch die Verwendung der StateManager
-Klasse können wir das Verhalten unseres Feindes auf organisierte Weise einfach verwalten und zwischen verschiedenen Verhaltensweisen wechseln.
Leerlaufzustand
Erklärung
Der Konstruktor public IdleState(Animator animator)
nimmt ein Animator
-Objekt als Parameter und weist es der animator
-Variablen der Klasse zu. Die StartState
-Methode, public override void StartState()
, setzt den "idle"-booleschen Parameter im Animator auf true, wodurch die Leerlaufanimation ausgelöst wird. Die EndState
-Methode, public override void EndState()
, setzt den "idle"-Parameter auf false, wodurch die Leerlaufanimation gestoppt wird.
Wie es für unseren Feind funktioniert
Wenn der Feind den IdleState
betritt, setzt die Methode StartState()
den "idle"-Parameter im Animator auf true, wodurch die Leerlaufanimation gestartet wird und der Feind im Leerlauf erscheint. Wenn der Feind den IdleState
verlässt, setzt die Methode EndState()
den "idle"-Parameter auf false, stoppt die Leerlaufanimation und bereitet den Feind darauf vor, in einen anderen Zustand zu wechseln, wie z.B. Bewegung oder Angriff.
Beispiel Workflow
Der StateManager
setzt den Zustand des Feindes auf IdleState
und ruft IdleState.StartState()
auf, um den "idle"-Parameter des Animators auf true zu setzen und die Leerlaufanimation zu starten. Beim Ändern des Verhaltens des Feindes ruft der StateManager
IdleState.EndState()
auf, setzt den "idle"-Parameter auf false und stoppt die Leerlaufanimation. Der StateManager
wechselt dann den Feind in einen neuen Zustand, wie z.B. AttackState
oder PatrolState
.
Durch die Verwendung der IdleState
-Klasse können wir sicherstellen, dass unser Feind das Leerlaufverhalten reibungslos ein- und austreten kann, was es dynamischer und realistischer macht. Diese Struktur erleichtert es auch, das Leerlaufverhalten des Feindes hinzuzufügen oder zu ändern, ohne andere Teile des Codes des Feindes zu beeinflussen.
Danke für Ihr Feedback!