Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
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!