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é.
Défi
FacileLes ennemis qui atteignent la base coûtent des vies.
- Dans
EnemyData, ajoutepublic int damage;. - Dans
Enemy, ajoutepublic static event Action<Enemy> ReachedBase;(using System;). Au dernier point de passage, déclenche l’événement et détruis l’ennemi. - Dans
GameManager, ajoute[SerializeField] private int startLives = 20;etprivate int lives;, puis attribue sa valeur àlivesdans Start. Abonne-toi comme ci-dessus ;OnReachedBasesoustraitenemy.data.damagedu 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
1Le parcours
Points de passageDonnées des ennemisEntraînez-vous par vous-même : Playground Unity