Contenu du cours
Jeu de Combat dans Unity
Jeu de Combat dans Unity
É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
etAnimator
, leRunState
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é queThresholdDistance
; -
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'étatidle
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 queThresholdDistance
. Si c'est le cas, elle passe à l'étatidle
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.
Merci pour vos commentaires !