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