Contenu du cours
Jeu de Combat dans Unity
Jeu de Combat dans Unity
É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.
Merci pour vos commentaires !