Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre État de Course | 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 Course

Modifications et Ajouts

Variable isStateFinished:

C'est une variable booléenne qui indique si l'état a terminé son exécution.

Méthode FinishState :

Ceci est une nouvelle méthode virtuelle qui définit isStateFinished à true. Être virtuel signifie que les classes dérivées peuvent remplacer cette méthode si elles ont besoin d'effectuer des actions supplémentaires lorsqu'un état se termine.

Pourquoi ces changements ont été faits

Les changements introduisent la variable isStateFinished pour suivre l'achèvement de l'état et la méthode FinishState pour standardiser le signalement de l'achèvement de l'état, permettant aux classes dérivées d'ajouter une logique personnalisée lors de l'achèvement de l'état.

État de course

Examinons la classe RunState, qui hérite de la classe State. Cette classe est responsable de la gestion du comportement de course de notre ennemi. Nous nous concentrerons sur les ajouts et les modifications apportés à cette classe.

Constructeur :

public RunState(Rigidbody2D rb, Animator animator, Transform p, float speed);

Ce constructeur initialise le RunState avec les composants nécessaires : un Rigidbody2D pour le mouvement, un Animator pour les animations, un Transform pour suivre le joueur, et une speed pour la vitesse à laquelle l'ennemi court ;

Méthode StartState :

public override void StartState(); Cette méthode définit isStateFinished sur false et déclenche l'animation de course en définissant le paramètre booléen "run" dans l'animateur sur true.

Méthode UpdateState :

public override void UpdateState(float DeltaTime); Cette méthode met à jour la position et l'orientation de l'ennemi en fonction de la position du joueur ; Elle ajuste l'échelle de l'ennemi pour faire face au joueur, calcule la vélocité en fonction de la vitesse, et applique cette vélocité au Rigidbody2D.

Méthode EndState :

public override void EndState() Cette méthode arrête l'animation de course en réglant le paramètre booléen "run" dans l'animateur à false.

Comment cela fonctionne pour notre ennemi

  • Mouvement et Animation : En utilisant Rigidbody2D et Animator, le RunState garantit que l'ennemi peut se déplacer en douceur et avoir des animations correspondantes. Cela rend le comportement visuellement et physiquement réaliste ;

  • Suivi de la Position du Joueur : Le transform player permet à l'ennemi de toujours se déplacer vers le joueur, ce qui est essentiel pour les comportements de poursuite ou de course ;

  • Gestion de la Direction : Ajuster le scale.x en fonction de la position du joueur garantit que l'ennemi fait face correctement au joueur pendant la course, ajoutant au réalisme ;

  • Mises à Jour Dynamiques de l'État : La méthode UpdateState est appelée à chaque frame pour ajuster continuellement le mouvement et la direction de l'ennemi en fonction de la position du joueur, rendant l'ennemi réactif et dynamique.

Initialisation de l'ennemi

Explication

Initialisation des États:

Les variables idle et runState sont initialisées avec leurs états respectifs. La variable idle est une instance de IdleState avec l'animateur passé en paramètre, tandis que runState est une instance de RunState qui inclut un Rigidbody2D, un Animator, un Transform pour le joueur, et une valeur de vitesse.

Initialisation du StateManager:

stateManager = new StateManager(idle); Le StateManager est initialisé avec l'état idle comme état de départ.

Définitions des Transitions :

  • FarAwayTransition : FarAwayTransition = new Transition(() => { return (ThresholdDistance < Vector2.Distance(transform.position, player.position)); }, new StatePourcentage(runState, 50f), new StatePourcentage(dashState, 50f));; Cette transition vérifie si le joueur est plus éloigné que ThresholdDistance ;

  • toIdleTransition : toIdleTransition = new Transition(() => { return stateManager.GetCurrentState().isStateFinished; }, new StatePourcentage(idle, 100)); Cette transition vérifie si l'état actuel est terminé. Si c'est le cas, elle passe à l'état idle avec une probabilité de 100%.

  • finishRunning : finishRunning = new Transition(() => { return (ThresholdDistance >= Vector2.Distance(transform.position, player.position)); }, new StatePourcentage(idle, 100)); Cette transition vérifie si le joueur est plus proche que ThresholdDistance. Si c'est le cas, elle passe à l'état idle avec une probabilité de 100%.

Ajout des Transitions au StateManager :

Ces lignes ajoutent les transitions définies au stateManager.

Pourquoi Nous L'avons Fait Comme Ça

Changements Dynamiques d'État :

Les transitions permettent à l'ennemi de changer dynamiquement son comportement en fonction de la position du joueur et de l'état d'achèvement de l'état actuel, rendant l'ennemi plus réactif et interactif dans l'environnement du jeu.

Transitions Conditionnelles :

L'utilisation de conditions (comme la vérification de la distance ou de l'achèvement de l'état) garantit que les transitions d'état se produisent de manière logique et appropriée, améliorant le réalisme du gameplay.

Transitions Basées sur la Probabilité :

L'utilisation de StatePourcentage permet des transitions basées sur la probabilité, ajoutant un élément d'imprévisibilité et de variété au comportement de l'ennemi.

Que se passe-t-il pour l'`animator` lorsque la méthode `StartState` est appelée dans la classe `RunState` ?

Que se passe-t-il pour l'animator lorsque la méthode StartState est appelée dans la classe RunState ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt