Combat contre le boss
Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 50 sur 50.
Un golem de pierre garde la porte qui permet de sortir de l’arène. Il marche lourdement vers toi et, lorsque tu t’approches, il lève les poings pendant un instant puis frappe le sol, ce qui te blesse si tu es encore à proximité. Après un coup, il se repose, et c’est seulement à ce moment-là que ton épée peut le blesser : sa peau de pierre repousse tous les coups lorsqu’il marche ou se prépare à frapper. Sa couleur indique ce qu’il fait : gris lorsqu’il marche, rouge lorsqu’il se prépare à frapper, cyan lorsqu’il se repose. Réduis sa santé à 0 et la porte s’ouvre. La barre en haut de l’écran suit chaque coup.
Écris le cerveau du golem sous la forme d’une machine à états avec une classe pour chaque état : Boss, ainsi que ChaseState, WindupState et RestState dans BossStates.cs. Le joueur, la barre de santé, la porte, IState, StateMachine et IDamageable sont déjà prêts.
Défi
DifficileL’Inspector attribue à Boss player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) et maxHealth (6), et relie son UnityEvent onDefeated à Open de Gate. PlayerDistance() et Tint(color) sont prêts.
BossimplémenteIDamageable. DansAwake, il définit sa santé surmaxHealthet crée uneStateMachineainsi que ses trois états, conservés dans les champs publicsmachine,chase,windupetrest(chaque état reçoit le boss dans son constructeur). DansStart, il déclencheHealthChangedavec sa santé etmaxHealth, puis commence dans l’étatchase; à chaque image, il met à jour la machine.ChaseState: colore le golem avecColor.grayet le fait avancer au sol vers le joueur à la vitessespeed. Dès que le joueur est à portée deslamRange, il passe à l’état de préparation.WindupState: le colore avecColor.redet le laisse immobile pendantwindupTimesecondes. Ensuite, il afficheSlam!, inflige au joueurslamDamagevia sonIDamageablesi le joueur est toujours à portée deslamRange, puis passe à l’état de repos.RestState: le colore avecColor.cyanet attendrestTimesecondes, puis repasse à l’état de poursuite. Chaque préparation et chaque repos dure le temps complet prévu.TakeDamagene compte que lorsque le golem est dans son état de repos et encore debout : il lui retire la quantité de dégâts et déclencheHealthChanged. À 0 point de santé, il afficheThe golem falls, appelleonDefeatedet se désactive.
Appuie sur Play, esquive les attaques et frappe pendant ses phases de repos, puis clique sur Check.
Essayez vous-même
using System;
using UnityEngine;
using UnityEngine.Events;
public class Boss : MonoBehaviour
{
public Transform player;
public float speed = 2f;
public float slamRange = 2.5f;
public float windupTime = 1f;
public float restTime = 2f;
public int slamDamage = 2;
public int maxHealth = 6;
public event Action<int, int> HealthChanged;
public UnityEvent onDefeated;
// À quelle distance se trouve le joueur, au sol.
public float PlayerDistance()
{
Vector3 d = player.position - transform.position;
d.y = 0f;
return d.magnitude;
}
// Gris quand il marche, rouge quand il prépare son attaque, cyan quand il se repose.
public void Tint(Color color)
{
GetComponent<Renderer>().material.color = color;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Architecture de jeu dans Unity
1Des composants, pas des hiérarchies
Des composants simplesUn script de base pour les ennemisDes composants abstraitsDes composants qui fonctionnent ensembleRécapitulatif : tourelle modulaire4Données sérialisées
Classes sérialisablesListes dans l’inspecteurÉnumérations dans l’inspecteurRécapitulatif : table de butin7Machines à états
Les états sous forme de classesUne machine à étatsTransitionsLes cerveaux des ennemisRécapitulatif : états d’une porte10Projet : Survivant de l’arène
Le hérosTypes d’ennemis2Interfaces dans Unity
IDamageableInterfaces et TryGetComponentGetComponentsRécapitulatif : touche d’interaction5ScriptableObjects
Assets de donnéesStatistiques des armesParamètres partagésLes vagues sous forme de donnéesRécapitulatif : base de données d’objets