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

Erklärung der AttackState-Klasse

Die AttackState-Klasse ist ein spezifischer Zustand, der das Angriffsverhalten des Feindes steuert. Diese Klasse erbt von der State-Klasse und enthält Methoden, um den Angriffsstatus zu starten, zu aktualisieren und zu beenden sowie die Angriffsaktion zu handhaben.

Klassendefinition und Mitgliedsvariablen

Klassendefinition:

public class AttackState : State; Diese Klasse erbt von der State-Klasse, was bedeutet, dass sie die abstrakten Methoden implementieren muss, die in State definiert sind.

Mitgliedsvariablen:

string attackStateName; Der Name des Angriffsstatus, der im Animator verwendet wird. bool isAttacking; Ein Flag, um anzuzeigen, ob der Feind gerade angreift. Animator animator; Steuert die Animationen. Transform transform; Der Transform des Feindes, der für Positionierung und Raycasting verwendet wird. float range; Die Angriffsreichweite. int damage; Der durch den Angriff verursachte Schaden. LayerMask playerLayer; Die Layer-Maske, die verwendet wird, um den Spieler zu identifizieren.

Konstruktor

Der Konstruktor initialisiert den AttackState mit den notwendigen Komponenten: einem Transform für die Positionierung, einem Animator für die Animationen, einer Layer-Maske zur Identifizierung des Spielers, dem Namen des Angriffsstatus, dem Schadenswert und der Angriffsreichweite. Er setzt diese Werte auf die entsprechenden Mitgliedsvariablen.

StartState-Methode

Diese Methode setzt isStateFinished auf false, löst die Angriffsanimation aus, indem der entsprechende boolesche Parameter im Animator auf true gesetzt wird, und setzt das isAttacking-Flag auf false zurück.

EndState Methode

Diese Methode stoppt die Angriffsanimation, indem sie den entsprechenden booleschen Parameter im Animator auf false setzt.

UpdateState Methode

Diese Methode wird in jedem Frame aufgerufen und löst die Attack Methode aus, um die Angriffsaktion auszuführen.

StartAction Methode

Diese Methode setzt isAttacking auf true, was anzeigt, dass die Angriffsaktion begonnen hat.

FinishMovement Methode

Diese Methode setzt isAttacking auf false, was anzeigt, dass die Angriffsaktion beendet ist.

Attack Methode

Diese Methode führt die Angriffsaktion aus. Wenn isAttacking true ist, wird ein Strahl in die Richtung geworfen, in die der Feind schaut. Wenn der Strahl ein Objekt auf der playerLayer trifft, wird die GetAttacked Methode auf dem getroffenen Objekt aufgerufen, Schaden zugefügt und die Angriffsaktion beendet.

Warum wir es so gemacht haben

  • Kontrolle über das Angriffsverhalten: Das isAttacking-Flag ermöglicht eine präzise Kontrolle darüber, wann der Angriff stattfinden soll, wodurch das Verhalten reaktionsfähiger auf Spielereignisse wird;

  • Dynamische Angriffsausführung: Durch die kontinuierliche Aktualisierung des Angriffsstatus des Feindes stellt der AttackState sicher, dass der Feind den Spieler genau und dynamisch angreifen kann;

  • Integration der Animation: Durch die Verwendung von Animator-Parametern wird sichergestellt, dass die Animationen des Feindes korrekt mit seinen Angriffen synchronisiert sind, was ein flüssiges und realistisches Erlebnis bietet.

Wie es im Kontext funktioniert

Eintreten in den Angriffsmodus: Wenn der Feind den AttackState betritt, wird die StartState-Methode aufgerufen, die die Angriffsanimation auslöst und das isAttacking-Flag zurücksetzt.

Während des Angriffs: Die UpdateState-Methode wird in jedem Frame aufgerufen. Sie löst die Attack-Methode aus, um zu überprüfen, ob ein Angriff stattfinden soll.

Angriff starten: Die StartAction-Methode setzt isAttacking auf true, wodurch die Attack-Methode die Angriffsaktion ausführen kann.

Angriff ausführen: Die Attack-Methode wirft einen Strahl, um den Spieler zu erkennen und Schaden zu verursachen, wenn der Spieler getroffen wird.

Angriff beenden: Die FinishMovement-Methode setzt isAttacking auf false, wodurch die Angriffsaktion gestoppt wird.

Verlassen des Angriffsmodus: Wenn der Feind den AttackState verlässt, wird die EndState-Methode aufgerufen, die die Angriffsanimation stoppt. Durch die Strukturierung des AttackState auf diese Weise stellen wir sicher, dass der Feind reaktionsschnelle und dynamische Angriffe auf den Spieler ausführen kann, mit fließenden Übergängen zwischen Animationen und Zuständen.

Nah-Übergang:

closeTransition: Dieser Übergang überprüft, ob sich der Spieler in einer bestimmten horizontalen Entfernung (ThresholdDistance) vom Feind befindet. Wenn die Bedingung erfüllt ist, wechselt er zufällig mit gleicher Wahrscheinlichkeit (jeweils 50%) zu attack1 oder attack2;

Code-Beispiel:

Hinzufügen von closeTransition zum Idle-Zustand:

stateManager.AddStateTransition(idle, closeTransition); Diese Zeile fügt die closeTransition zum idle-Zustand hinzu, sodass der Zustandsautomat diese Bedingung überprüfen kann, wenn der Feind im Leerlaufzustand ist.

Warum wir es so gemacht haben

Das Übergangssystem ermöglicht es dem Feind, basierend auf der Nähe des Spielers in einen Angriffsmodus zu wechseln, was das Engagement erhöht. Der probabilistische Ansatz zur Auswahl zwischen verschiedenen Angriffen fügt Unvorhersehbarkeit hinzu, was die Herausforderung und das Interesse am Spiel steigert.

Wie es im Kontext funktioniert

Leerlaufzustand: Während der Feind im idle-Zustand ist, überprüft er ständig, ob der Spieler innerhalb der ThresholdDistance mithilfe der closeTransition ist. Wenn der Spieler nah genug ist, wird die closeTransition ausgelöst, und der Feind wechselt entweder zu attack1 oder attack2.

Angriffszustände:

Sobald attack1 oder attack2 erreicht ist, führt der Feind den Angriff aus. Nach Abschluss des Angriffs wechselt die bestehende toIdleTransition den Feind zurück in den idle-Zustand, bereit, die closeTransition-Bedingung erneut zu überprüfen.

Durch das Hinzufügen dieser closeTransition stellen wir sicher, dass der Feind den Spieler dynamischer und unvorhersehbarer angreifen kann, wenn sich der Spieler in unmittelbarer Nähe befindet. Dies verbessert das Gameplay, indem das Verhalten des Feindes reaktionsschneller und ansprechender wird.

Welche Methode ist in der `AttackState`-Klasse dafür verantwortlich, den Spieler im Bereich zu erkennen und Schaden zuzufügen?

Welche Methode ist in der AttackState-Klasse dafür verantwortlich, den Spieler im Bereich zu erkennen und Schaden zuzufügen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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