Contenu du cours
Jeu de Combat dans Unity
Jeu de Combat dans Unity
Ajouter des Particules
Explication des modifications dans la méthode Update
private void Update()
{
stateManager.UpdateStates(Time.deltaTime);
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
}
La méthode Update
dans le script de l’ennemi inclut désormais une logique pour mettre à jour le gestionnaire d’états, garantir que l’ennemi fait face au joueur, et gérer un cas spécifique où l’ennemi est dans un DeathState
. Cette logique a été ajoutée pour empêcher l’ennemi de continuer à faire face au joueur après sa mort.
Composants de la méthode
Mise à jour du StateManager
stateManager.UpdateStates(Time.deltaTime)
Cette ligne met à jour le gestionnaire d’états, en passant le temps écoulé depuis la dernière image (Time.deltaTime
). Elle garantit que l’état actuel est mis à jour correctement à chaque image.
Vérification du DeathState
if (stateManager.GetCurrentState() is DeathState) return;
Cette ligne vérifie si l’état actuel est DeathState
.
Si l’ennemi est dans le DeathState
, la méthode retourne immédiatement, empêchant toute mise à jour supplémentaire concernant l’orientation vers le joueur ou d’autres comportements.
Orientation vers le joueur
Les lignes suivantes garantissent que l’ennemi fait toujours face au joueur :
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
scale.x = transform.position.x > player.position.x ? -1 : 1;
Cette ligne vérifie si la position x de l’ennemi est supérieure à celle du joueur :
- Si c’est vrai,
scale.x
est défini à-1
, orientant l’ennemi vers la gauche ; - Si c’est faux,
scale.x
est défini à1
, orientant l’ennemi vers la droite.
transform.localScale = scale;
Cette ligne applique l’échelle mise à jour au transform de l’ennemi, garantissant qu’il fait face à la bonne direction.
Pourquoi avons-nous procédé ainsi
Gestion de l'état de mort
L'ajout de la vérification pour DeathState
garantit que l'ennemi n'actualise plus son comportement ou son orientation après sa mort. Cela est essentiel pour maintenir la logique du jeu et éviter des comportements inattendus une fois que l'ennemi est censé être inactif.
Logique centralisée
En déplaçant la logique d'orientation vers le joueur dans la méthode Update
, ce comportement est centralisé, ce qui réduit la redondance et améliore la maintenabilité du code.
Cela garantit que l'ennemi fait toujours face au joueur, quel que soit l'état actuel, ce qui simplifie le code spécifique à chaque état.
Explication de la gestion de la mort de l'ennemi
public class DeathState : State
{
Animator animator;
public DeathState(Animator animator)
{
this.animator = animator;
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("death", true);
}
public override void EndState()
{
}
}
La classe DeathState
est un état spécifique qui gère le comportement de l'ennemi lorsqu'il meurt.
Pourquoi avons-nous procédé ainsi
Gestion du comportement de mort
La classe DeathState
gère spécifiquement le comportement de l’ennemi lors de sa mort, en veillant à ce que l’animation de mort soit jouée et que l’état soit marqué comme terminé.
Intégration de l’animation
L’utilisation des paramètres de l’Animator garantit que l’animation de mort est correctement synchronisée avec le changement d’état, offrant ainsi une expérience fluide et réaliste.
Apparition de particules à la mort de l’ennemi
if (health <= 0)
{
stateManager.ChangeState(deathState);
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
deathParticle.Play();
Destroy(deathParticle.gameObject, 5);
}
Ce code montre comment l’ennemi gère sa mort lorsque sa santé atteint zéro. Il passe à l’état DeathState
et lance un effet de particules de mort.
Décomposition du code
Vérification de la santé
if (health <= 0)
Cette condition vérifie si la santé de l’ennemi est tombée à zéro ou en dessous.
Transition vers DeathState
stateManager.ChangeState(deathState)
Cette ligne fait passer l’ennemi à l’état DeathState
en utilisant le StateManager
.
Instanciation des particules de mort
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)
Cette ligne crée une instance de l’effet de particules de mort à la position de l’ennemi.
deathParticles
est un prefab qui contient le système de particules pour l’effet de mort.
Quaternion.identity
garantit que les particules n’ont aucune rotation.
Lecture des particules de mort
deathParticle.Play()
Cette ligne lance l’effet de particules instancié.
Destruction des particules de mort
Destroy(deathParticle.gameObject, 5)
Cette ligne programme la destruction du GameObject
de l’effet de particules après 5 secondes, garantissant qu’il ne persiste pas indéfiniment dans le jeu.
Raisons de cette approche
Gestion des états :
La transition vers DeathState
garantit que le comportement de mort de l’ennemi est correctement géré et que toute logique spécifique à cet état est exécutée.
Effets visuels : L’affichage d’un effet de particules de mort fournit un retour visuel au joueur, améliorant ainsi l’expérience de jeu.
Merci pour vos commentaires !