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

Explication de la classe AttackState

La classe AttackState est un état spécifique qui gère le comportement d'attaque 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 d'attaque, ainsi que pour gérer l'action d'attaque.

Définition de la Classe et Variables Membres

Définition de la Classe :

public class AttackState : State; Cette classe hérite de la classe State, ce qui signifie qu'elle doit implémenter les méthodes abstraites définies dans State.

Variables Membres :

string attackStateName; Le nom de l'état d'attaque utilisé dans l'animateur. bool isAttacking; Un indicateur pour savoir si l'ennemi est actuellement en train d'attaquer. Animator animator; Contrôle les animations. Transform transform; Le transform de l'ennemi, utilisé pour le positionnement et le raycasting. float range; La portée de l'attaque. int damage; Les dégâts infligés par l'attaque. LayerMask playerLayer; Le masque de couche utilisé pour identifier le joueur.

Constructeur

Le constructeur initialise l'AttackState avec les composants nécessaires : un Transform pour le positionnement, un Animator pour les animations, un masque de couche pour identifier le joueur, le nom de l'état d'attaque, la valeur des dégâts et la portée de l'attaque. Il assigne ces valeurs aux variables membres correspondantes.

Méthode StartState

Cette méthode définit isStateFinished à false, déclenche l'animation d'attaque en définissant le paramètre booléen approprié dans l'animateur à true, et réinitialise le drapeau isAttacking à false.

Méthode EndState

Cette méthode arrête l'animation d'attaque en définissant le paramètre booléen approprié dans l'animateur sur false.

Méthode UpdateState

Cette méthode est appelée à chaque frame et déclenche la méthode Attack pour effectuer l'action d'attaque.

Méthode StartAction

Cette méthode définit isAttacking sur true, indiquant que l'action d'attaque a commencé.

Méthode FinishMovement

Cette méthode définit isAttacking sur false, indiquant que l'action d'attaque est terminée.

Méthode Attack

Cette méthode effectue l'action d'attaque. Si isAttacking est true, elle lance un rayon dans la direction vers laquelle l'ennemi est orienté. Si le rayon touche un objet sur le playerLayer, elle appelle la méthode GetAttacked sur l'objet touché, infligeant des dégâts et mettant fin à l'action d'attaque.

Pourquoi nous l'avons fait ainsi

  • Contrôle du comportement d'attaque : Le drapeau isAttacking permet un contrôle précis sur le moment où l'attaque doit se produire, rendant le comportement plus réactif aux événements du jeu ;

  • Exécution dynamique de l'attaque : En mettant continuellement à jour l'état d'attaque de l'ennemi, l'AttackState garantit que l'ennemi peut attaquer le joueur de manière précise et dynamique ;

  • Intégration de l'animation : L'utilisation de paramètres d'animateur garantit que les animations de l'ennemi sont correctement synchronisées avec ses attaques, offrant une expérience fluide et réaliste.

Comment cela fonctionne dans le contexte

Entrée dans l'état d'attaque : Lorsque l'ennemi entre dans l'AttackState, la méthode StartState est appelée, déclenchant l'animation d'attaque et réinitialisant le drapeau isAttacking.

Pendant l'attaque : La méthode UpdateState est appelée à chaque frame. Elle déclenche la méthode Attack pour vérifier si une attaque doit se produire.

Début de l'attaque : La méthode StartAction définit isAttacking sur true, permettant à la méthode Attack d'effectuer l'action d'attaque.

Exécution de l'attaque : La méthode Attack lance un rayon pour détecter le joueur et inflige des dégâts si le joueur est touché.

Fin de l'attaque : La méthode FinishMovement définit isAttacking sur false, arrêtant l'action d'attaque.

Sortie de l'état d'attaque : Lorsque l'ennemi quitte l'AttackState, la méthode EndState est appelée, arrêtant l'animation d'attaque. En structurant l'AttackState de cette manière, nous nous assurons que l'ennemi peut effectuer des attaques réactives et dynamiques sur le joueur, avec des transitions fluides entre les animations et les états.

Transition Proche :

closeTransition : Cette transition vérifie si le joueur est à une certaine distance horizontale (ThresholdDistance) de l'ennemi. Si la condition est remplie, elle passe aléatoirement à attack1 ou attack2 avec une probabilité égale (50% chacune);

Exemple de code :

Ajout de closeTransition à l'état Idle:

stateManager.AddStateTransition(idle, closeTransition); Cette ligne ajoute le closeTransition à l'état idle, permettant à la machine d'état de vérifier cette condition lorsque l'ennemi est dans l'état idle.

Pourquoi nous l'avons fait de cette manière

Le système de transition permet à l'ennemi de passer à un état d'attaque en fonction de la proximité du joueur, améliorant l'engagement. L'approche probabiliste pour choisir entre différentes attaques ajoute de l'imprévisibilité, augmentant le défi et l'intérêt du jeu.

Comment cela fonctionne dans le contexte

État Idle: Lorsque l'ennemi est dans l'état idle, il vérifie constamment si le joueur est à l'intérieur de la ThresholdDistance en utilisant le closeTransition. Si le joueur est suffisamment proche, le closeTransition se déclenche, et l'ennemi passe à attack1 ou attack2.

États d'attaque:

Une fois dans attack1 ou attack2, l'ennemi effectue l'attaque. Après la fin de l'attaque, le toIdleTransition existant fait revenir l'ennemi à l'état idle, prêt à vérifier à nouveau la condition closeTransition.

En ajoutant cette closeTransition, nous nous assurons que l'ennemi peut engager le joueur de manière plus dynamique et imprévisible lorsque le joueur est à portée rapprochée. Cela améliore le gameplay en rendant le comportement de l'ennemi plus réactif et engageant.

Quelle méthode est responsable de détecter et d'appliquer des dégâts au joueur à portée dans la classe `AttackState` ?

Quelle méthode est responsable de détecter et d'appliquer des dégâts au joueur à portée dans la classe AttackState ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

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