Sprint-Zustand
Animator Controller
public class AnimatorController : MonoBehaviour
{
[SerializeField] Enemy enemy;
public void FinishMovement()
{
enemy.FinishMovement();
}
public void EndCurrentState()
{
enemy.EndCurrentState();
}
}
Zweck des AnimatorController
Die Klasse AnimatorController dient dazu, das Verhalten des Gegners über Animator-Ereignisse zu steuern und auszulösen. Dadurch wird eine nahtlose Integration von Animationstransitionen und Zustandswechseln ermöglicht, sodass das Verhalten des Gegners mit seinen Animationen übereinstimmt.
Klassendefinition und Member-Variable
Klassendefinition:
public class AnimatorController : MonoBehaviour definiert eine Klasse, die von MonoBehaviour erbt und somit an ein GameObject in Unity angehängt werden kann.
Member-Variable:
[SerializeField] Enemy enemy; ist ein serialisiertes Feld, das es ermöglicht, ein Enemy-Objekt direkt über den Unity Inspector mit dem AnimatorController zu verknüpfen.
Die Variable enemy ist eine Referenz auf das Enemy-Skript, das Funktionen zur Steuerung des gegnerischen Verhaltens enthält.
Methoden
FinishMovement-Methode:
public void FinishMovement(): Diese Methode ruft enemy.FinishMovement() auf. Sie ist dafür vorgesehen, von einem Animator-Event aufgerufen zu werden, um das Ende einer Bewegungsanimation zu signalisieren.
EndCurrentState-Methode:
public void EndCurrentState(): Diese Methode ruft enemy.EndCurrentState() auf. Sie soll von einem Animator-Event aufgerufen werden, um das Ende des aktuellen Zustands zu signalisieren.
Integration mit Animator-Events
Animator-Events:
Animator-Events sind spezielle Ereignisse, die auf Animations-Timelines innerhalb des Unity-Animators platziert werden können.
Diese Events können Funktionen in Skripten aufrufen, die am selben GameObject oder an dessen Kindobjekten angehängt sind.
Funktionsweise: Während einer Animation, wie beispielsweise einer Lauf- oder Angriffsanimation, können bestimmte Punkte in der Timeline Events auslösen.
Dash State
public class DashState : State
{
Rigidbody2D rb;
Animator animator;
Transform player;
float speed;
Vector2 scale;
Vector2 velocity;
bool stopDashing = false;
public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
{
this.animator = animator;
player = p;
this.speed = DashSpeed;
this.rb = rb;
scale = rb.transform.localScale;
velocity = new Vector2();
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("dash", true);
stopDashing = false;
}
public override void FinishMovement()
{
stopDashing = true;
}
public override void UpdateState(float deltaTime)
{
if (stopDashing) return;
scale.x = rb.position.x > player.position.x ? -1 : 1;
rb.transform.localScale = scale;
velocity.x = scale.x * speed;
rb.velocity = velocity;
}
public override void EndState()
{
animator.SetBool("dash", false);
}
}
Erklärung der DashState-Klasse
Die DashState-Klasse ist ein spezifischer Zustand, der das Dash-Verhalten des Gegners steuert. Diese Klasse erbt von der State-Klasse und enthält Methoden zum Starten, Aktualisieren und Beenden des Dash-Zustands sowie zur Behandlung des Ereignisses für das Beenden der Bewegung.
Konstruktor
Der Konstruktor initialisiert die DashState mit den notwendigen Komponenten: einem Rigidbody2D für die Bewegung, einem Animator, einem Transform für den Spieler und einer Dash-Geschwindigkeit. Er setzt die Anfangsskalierung und initialisiert den Geschwindigkeitsvektor.
StartState-Methode
Diese Methode setzt isStateFinished auf false und löst die Dash-Animation aus, indem der boolesche Parameter "dash" im Animator auf true gesetzt wird. Außerdem wird das stopDashing-Flag auf false zurückgesetzt.
FinishMovement-Methode
Diese Methode setzt stopDashing auf true, wodurch die Dash-Aktion in der Methode UpdateState gestoppt wird.
UpdateState-Methode
Diese Methode aktualisiert die Position und Ausrichtung des Gegners basierend auf der Position des Spielers. Wenn stopDashing auf true gesetzt ist, kehrt die Methode frühzeitig zurück und verhindert weitere Aktualisierungen. Die Skalierung des Gegners wird angepasst, um zum Spieler zu zeigen, die Geschwindigkeit wird berechnet und diese Geschwindigkeit wird auf das Rigidbody2D angewendet.
EndState-Methode
Diese Methode stoppt die Dash-Animation, indem der boolesche Parameter "dash" im Animator auf false gesetzt wird.
Warum wir es so gemacht haben
Das stopDashing-Flag ermöglicht eine präzise Kontrolle darüber, wann der Dash gestoppt werden soll, wodurch das Verhalten reaktiver auf Spielereignisse wird. Durch die kontinuierliche Aktualisierung der Position und Richtung des Gegners stellt der DashState sicher, dass der Gegner schnell und genau auf den Spieler zustürmen kann. Die Verwendung von Animator-Parametern gewährleistet, dass die Animationen des Gegners korrekt mit seinen Bewegungen synchronisiert sind und so ein flüssiges und realistisches Erlebnis bieten.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Fragen Sie mich Fragen zu diesem Thema
Zusammenfassen Sie dieses Kapitel
Zeige reale Beispiele
Awesome!
Completion rate improved to 3.33
Sprint-Zustand
Swipe um das Menü anzuzeigen
Animator Controller
public class AnimatorController : MonoBehaviour
{
[SerializeField] Enemy enemy;
public void FinishMovement()
{
enemy.FinishMovement();
}
public void EndCurrentState()
{
enemy.EndCurrentState();
}
}
Zweck des AnimatorController
Die Klasse AnimatorController dient dazu, das Verhalten des Gegners über Animator-Ereignisse zu steuern und auszulösen. Dadurch wird eine nahtlose Integration von Animationstransitionen und Zustandswechseln ermöglicht, sodass das Verhalten des Gegners mit seinen Animationen übereinstimmt.
Klassendefinition und Member-Variable
Klassendefinition:
public class AnimatorController : MonoBehaviour definiert eine Klasse, die von MonoBehaviour erbt und somit an ein GameObject in Unity angehängt werden kann.
Member-Variable:
[SerializeField] Enemy enemy; ist ein serialisiertes Feld, das es ermöglicht, ein Enemy-Objekt direkt über den Unity Inspector mit dem AnimatorController zu verknüpfen.
Die Variable enemy ist eine Referenz auf das Enemy-Skript, das Funktionen zur Steuerung des gegnerischen Verhaltens enthält.
Methoden
FinishMovement-Methode:
public void FinishMovement(): Diese Methode ruft enemy.FinishMovement() auf. Sie ist dafür vorgesehen, von einem Animator-Event aufgerufen zu werden, um das Ende einer Bewegungsanimation zu signalisieren.
EndCurrentState-Methode:
public void EndCurrentState(): Diese Methode ruft enemy.EndCurrentState() auf. Sie soll von einem Animator-Event aufgerufen werden, um das Ende des aktuellen Zustands zu signalisieren.
Integration mit Animator-Events
Animator-Events:
Animator-Events sind spezielle Ereignisse, die auf Animations-Timelines innerhalb des Unity-Animators platziert werden können.
Diese Events können Funktionen in Skripten aufrufen, die am selben GameObject oder an dessen Kindobjekten angehängt sind.
Funktionsweise: Während einer Animation, wie beispielsweise einer Lauf- oder Angriffsanimation, können bestimmte Punkte in der Timeline Events auslösen.
Dash State
public class DashState : State
{
Rigidbody2D rb;
Animator animator;
Transform player;
float speed;
Vector2 scale;
Vector2 velocity;
bool stopDashing = false;
public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
{
this.animator = animator;
player = p;
this.speed = DashSpeed;
this.rb = rb;
scale = rb.transform.localScale;
velocity = new Vector2();
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("dash", true);
stopDashing = false;
}
public override void FinishMovement()
{
stopDashing = true;
}
public override void UpdateState(float deltaTime)
{
if (stopDashing) return;
scale.x = rb.position.x > player.position.x ? -1 : 1;
rb.transform.localScale = scale;
velocity.x = scale.x * speed;
rb.velocity = velocity;
}
public override void EndState()
{
animator.SetBool("dash", false);
}
}
Erklärung der DashState-Klasse
Die DashState-Klasse ist ein spezifischer Zustand, der das Dash-Verhalten des Gegners steuert. Diese Klasse erbt von der State-Klasse und enthält Methoden zum Starten, Aktualisieren und Beenden des Dash-Zustands sowie zur Behandlung des Ereignisses für das Beenden der Bewegung.
Konstruktor
Der Konstruktor initialisiert die DashState mit den notwendigen Komponenten: einem Rigidbody2D für die Bewegung, einem Animator, einem Transform für den Spieler und einer Dash-Geschwindigkeit. Er setzt die Anfangsskalierung und initialisiert den Geschwindigkeitsvektor.
StartState-Methode
Diese Methode setzt isStateFinished auf false und löst die Dash-Animation aus, indem der boolesche Parameter "dash" im Animator auf true gesetzt wird. Außerdem wird das stopDashing-Flag auf false zurückgesetzt.
FinishMovement-Methode
Diese Methode setzt stopDashing auf true, wodurch die Dash-Aktion in der Methode UpdateState gestoppt wird.
UpdateState-Methode
Diese Methode aktualisiert die Position und Ausrichtung des Gegners basierend auf der Position des Spielers. Wenn stopDashing auf true gesetzt ist, kehrt die Methode frühzeitig zurück und verhindert weitere Aktualisierungen. Die Skalierung des Gegners wird angepasst, um zum Spieler zu zeigen, die Geschwindigkeit wird berechnet und diese Geschwindigkeit wird auf das Rigidbody2D angewendet.
EndState-Methode
Diese Methode stoppt die Dash-Animation, indem der boolesche Parameter "dash" im Animator auf false gesetzt wird.
Warum wir es so gemacht haben
Das stopDashing-Flag ermöglicht eine präzise Kontrolle darüber, wann der Dash gestoppt werden soll, wodurch das Verhalten reaktiver auf Spielereignisse wird. Durch die kontinuierliche Aktualisierung der Position und Richtung des Gegners stellt der DashState sicher, dass der Gegner schnell und genau auf den Spieler zustürmen kann. Die Verwendung von Animator-Parametern gewährleistet, dass die Animationen des Gegners korrekt mit seinen Bewegungen synchronisiert sind und so ein flüssiges und realistisches Erlebnis bieten.
Danke für Ihr Feedback!