Menu
CoddyTech

Atteindre la base

Leçon 3 sur 25 du cours Jeu Unity : défense de tours de Coddy.

Un ennemi arrivé au dernier point de passage a atteint la base : il disparaît et la base perd des vies. Les vies sont gérées par GameManager. Bientôt, les ennemis seront créés à partir de prefabs, et un prefab ne peut pas pointer vers le GameManager présent dans la scène ; l’ennemi envoie donc un signal à l’aide d’un événement statique. Cet événement appartient à la classe Enemy, donc GameManager s’y abonne une seule fois et reçoit les signaux de tous les ennemis, y compris ceux créés plus tard. L’ennemi le déclenche avec ReachedBase?.Invoke(this); : le ? l’ignore si personne n’écoute, et this indique à l’écouteur quel type a réussi à passer.

void OnEnable()
{
    Enemy.ReachedBase += OnReachedBase;
}

void OnDisable()
{
    Enemy.ReachedBase -= OnReachedBase;
}

Un événement statique persiste aussi longtemps que le jeu ; chaque += doit donc avoir son -= correspondant : un GameManager détruit qui ne s’est jamais désabonné continuerait à être appelé.

challenge icon

Défi

Facile

Les ennemis qui atteignent la base coûtent des vies.

  1. Dans EnemyData, ajoute public int damage;.
  2. Dans Enemy, ajoute public static event Action<Enemy> ReachedBase; (using System;). Au dernier point de passage, déclenche l’événement et détruis l’ennemi.
  3. Dans GameManager, ajoute [SerializeField] private int startLives = 20; et private int lives;, puis attribue sa valeur à lives dans Start. Abonne-toi comme ci-dessus ; OnReachedBase soustrait enemy.data.damage du nombre de vies.

Appuie sur « Jouer » : les deux ennemis disparaissent à la base. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

// À venir : les vies, l'argent, le HUD, la victoire et la défaite.
public class GameManager : MonoBehaviour
{
}

Toutes les leçons de Jeu Unity : défense de tours

Entraînez-vous par vous-même : Playground Unity