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

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

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
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.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6
some-alt