Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre État de Ruée | Comportement de l'Ennemi
Jeu de Combat dans Unity
course content

Contenu du cours

Jeu de Combat dans Unity

Jeu de Combat dans Unity

1. Système d'Animation Unity
2. Comportement du Joueur
3. Comportement de l'Ennemi
4. Améliorer le Jeu
5. Améliorer le Jeu Flappy Bird

book
État de Ruée

Contrôleur d'Animateur

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Objectif du AnimatorController

La classe AnimatorController est conçue pour gérer et déclencher les comportements de l'ennemi via des événements de l'animateur. Cela permet une intégration fluide des transitions d'animation et des changements d'état, garantissant que le comportement de l'ennemi correspond à ses animations.

Définition de la classe et variable membre

Définition de la classe : public class AnimatorController : MonoBehaviour définit une classe qui hérite de MonoBehaviour, permettant de l'attacher à un GameObject dans Unity.

Variable membre : [SerializeField] Enemy enemy; est un champ sérialisé qui permet de lier un objet Enemy au AnimatorController directement depuis l'inspecteur Unity. La variable enemy est une référence au script de l'ennemi, qui contient les fonctions contrôlant le comportement de l'ennemi.

Méthodes

Méthode FinishMovement : public void FinishMovement(): Cette méthode appelle enemy.FinishMovement(). Elle est conçue pour être appelée par un événement de l’animateur, signalant la fin d’une animation de mouvement.

Méthode EndCurrentState : public void EndCurrentState(): Cette méthode appelle enemy.EndCurrentState(). Elle est destinée à être appelée par un événement de l’animateur pour signaler la fin de l’état actuel.

Intégration avec les événements de l’animateur

Événements de l’animateur : Les événements de l’animateur sont des événements spéciaux pouvant être placés sur les timelines d’animation dans l’Animator de Unity. Ces événements peuvent appeler des fonctions dans les scripts attachés au même GameObject ou à ses enfants.

Fonctionnement : Pendant une animation, telle qu’une animation de course ou d’attaque, des points spécifiques de la timeline peuvent déclencher des événements.

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);
    }
}

Explication de la classe DashState

La classe DashState est un état spécifique qui gère le comportement de dash de l'ennemi. Cette classe hérite de la classe State et inclut des méthodes pour démarrer, mettre à jour et terminer l'état de dash, ainsi que pour gérer l'événement de fin de mouvement.

Constructeur

Le constructeur initialise la classe DashState avec les composants nécessaires : un Rigidbody2D pour le mouvement, un Animator, un Transform pour le joueur, et une vitesse de dash. Il définit l'échelle initiale et initialise le vecteur de vélocité.

Méthode StartState

Cette méthode définit isStateFinished sur false et déclenche l'animation de dash en activant le paramètre booléen "dash" dans l'animator à true. Elle réinitialise également le drapeau stopDashing à false.

Méthode FinishMovement

Cette méthode définit stopDashing sur true, ce qui arrête l'action de dash dans la méthode UpdateState.

Méthode UpdateState

Cette méthode met à jour la position et l'orientation de l'ennemi en fonction de la position du joueur. Si stopDashing est true, la méthode retourne immédiatement, interrompant ainsi les mises à jour. Elle ajuste l'échelle de l'ennemi pour qu'il fasse face au joueur, calcule la vélocité en fonction de la vitesse, et applique cette vélocité au Rigidbody2D.

Méthode EndState

Cette méthode arrête l'animation de dash en définissant le paramètre booléen "dash" de l'animateur sur false.

Pourquoi avons-nous procédé ainsi

Le drapeau stopDashing permet un contrôle précis du moment où le dash doit s'arrêter, rendant le comportement plus réactif aux événements du jeu. En mettant continuellement à jour la position et la direction de l'ennemi, le DashState garantit que l'ennemi peut foncer rapidement et précisément vers le joueur. L'utilisation des paramètres de l'animateur assure que les animations de l'ennemi sont correctement synchronisées avec ses mouvements, offrant ainsi une expérience fluide et réaliste.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

course content

Contenu du cours

Jeu de Combat dans Unity

Jeu de Combat dans Unity

1. Système d'Animation Unity
2. Comportement du Joueur
3. Comportement de l'Ennemi
4. Améliorer le Jeu
5. Améliorer le Jeu Flappy Bird

book
État de Ruée

Contrôleur d'Animateur

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Objectif du AnimatorController

La classe AnimatorController est conçue pour gérer et déclencher les comportements de l'ennemi via des événements de l'animateur. Cela permet une intégration fluide des transitions d'animation et des changements d'état, garantissant que le comportement de l'ennemi correspond à ses animations.

Définition de la classe et variable membre

Définition de la classe : public class AnimatorController : MonoBehaviour définit une classe qui hérite de MonoBehaviour, permettant de l'attacher à un GameObject dans Unity.

Variable membre : [SerializeField] Enemy enemy; est un champ sérialisé qui permet de lier un objet Enemy au AnimatorController directement depuis l'inspecteur Unity. La variable enemy est une référence au script de l'ennemi, qui contient les fonctions contrôlant le comportement de l'ennemi.

Méthodes

Méthode FinishMovement : public void FinishMovement(): Cette méthode appelle enemy.FinishMovement(). Elle est conçue pour être appelée par un événement de l’animateur, signalant la fin d’une animation de mouvement.

Méthode EndCurrentState : public void EndCurrentState(): Cette méthode appelle enemy.EndCurrentState(). Elle est destinée à être appelée par un événement de l’animateur pour signaler la fin de l’état actuel.

Intégration avec les événements de l’animateur

Événements de l’animateur : Les événements de l’animateur sont des événements spéciaux pouvant être placés sur les timelines d’animation dans l’Animator de Unity. Ces événements peuvent appeler des fonctions dans les scripts attachés au même GameObject ou à ses enfants.

Fonctionnement : Pendant une animation, telle qu’une animation de course ou d’attaque, des points spécifiques de la timeline peuvent déclencher des événements.

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);
    }
}

Explication de la classe DashState

La classe DashState est un état spécifique qui gère le comportement de dash de l'ennemi. Cette classe hérite de la classe State et inclut des méthodes pour démarrer, mettre à jour et terminer l'état de dash, ainsi que pour gérer l'événement de fin de mouvement.

Constructeur

Le constructeur initialise la classe DashState avec les composants nécessaires : un Rigidbody2D pour le mouvement, un Animator, un Transform pour le joueur, et une vitesse de dash. Il définit l'échelle initiale et initialise le vecteur de vélocité.

Méthode StartState

Cette méthode définit isStateFinished sur false et déclenche l'animation de dash en activant le paramètre booléen "dash" dans l'animator à true. Elle réinitialise également le drapeau stopDashing à false.

Méthode FinishMovement

Cette méthode définit stopDashing sur true, ce qui arrête l'action de dash dans la méthode UpdateState.

Méthode UpdateState

Cette méthode met à jour la position et l'orientation de l'ennemi en fonction de la position du joueur. Si stopDashing est true, la méthode retourne immédiatement, interrompant ainsi les mises à jour. Elle ajuste l'échelle de l'ennemi pour qu'il fasse face au joueur, calcule la vélocité en fonction de la vitesse, et applique cette vélocité au Rigidbody2D.

Méthode EndState

Cette méthode arrête l'animation de dash en définissant le paramètre booléen "dash" de l'animateur sur false.

Pourquoi avons-nous procédé ainsi

Le drapeau stopDashing permet un contrôle précis du moment où le dash doit s'arrêter, rendant le comportement plus réactif aux événements du jeu. En mettant continuellement à jour la position et la direction de l'ennemi, le DashState garantit que l'ennemi peut foncer rapidement et précisément vers le joueur. L'utilisation des paramètres de l'animateur assure que les animations de l'ennemi sont correctement synchronisées avec ses mouvements, offrant ainsi une expérience fluide et réaliste.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 6
some-alt