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

Welche Methode wird aufgerufen, um den aktuellen Zustand in der `StateManager`-Klasse zu aktualisieren?

Welche Methode wird aufgerufen, um den aktuellen Zustand in der StateManager-Klasse zu aktualisieren?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3
We're sorry to hear that something went wrong. What happened?
some-alt