Menu
CoddyTech

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.

challenge icon

Défi

Difficile

L’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.

  • Boss implémente IDamageable. Dans Awake, il définit sa santé sur maxHealth et crée une StateMachine ainsi que ses trois états, conservés dans les champs publics machine, chase, windup et rest (chaque état reçoit le boss dans son constructeur). Dans Start, il déclenche HealthChanged avec sa santé et maxHealth, puis commence dans l’état chase ; à chaque image, il met à jour la machine.
  • ChaseState : colore le golem avec Color.gray et le fait avancer au sol vers le joueur à la vitesse speed. Dès que le joueur est à portée de slamRange, il passe à l’état de préparation.
  • WindupState : le colore avec Color.red et le laisse immobile pendant windupTime secondes. Ensuite, il affiche Slam!, inflige au joueur slamDamage via son IDamageable si le joueur est toujours à portée de slamRange, puis passe à l’état de repos.
  • RestState : le colore avec Color.cyan et attend restTime secondes, puis repasse à l’état de poursuite. Chaque préparation et chaque repos dure le temps complet prévu.
  • TakeDamage ne 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éclenche HealthChanged. À 0 point de santé, il affiche The golem falls, appelle onDefeated et 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;
    }
}
quiz iconTestez-vous

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