Menu
CoddyTech

Compteur de vagues

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

Le HUD affiche le numéro de la vague. Le spawner le connaît, et le GameManager l’affiche, alors le spawner déclenche un événement C#, WaveStarted, avec la vague et le nombre de vagues. Contrairement aux événements statiques des ennemis, il appartient à un seul spawner, et le GameManager s’y abonne via son champ spawner :

void OnEnable()
{
    spawner.WaveStarted += ShowWave;
}

Un Action<int, int> transmet deux int, donc ShowWave en prend deux : void ShowWave(int wave, int total).

challenge icon

Défi

Moyen

Affiche la vague en cours.

  1. Dans WaveSpawner, ajoute public event Action<int, int> WaveStarted; (using System;) et déclenche l’événement avec i + 1 et waves.Count au début d’une vague.
  2. Dans GameManager, ajoute les champs sérialisés spawner (WaveSpawner) et waveText (TMP_Text). Abonne-toi dans OnEnable, désabonne-toi dans OnDisable et affiche Wave 1/8.

Appuie sur « Jouer » : Wave 1/8 s’affiche en haut à droite au début de la première vague. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private int startMoney = 150;
    [SerializeField] private int startLives = 20;
    [SerializeField] private TMP_Text moneyText;
    [SerializeField] private TMP_Text livesText;

    private int money;
    private int lives;

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

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

    void Start()
    {
        money = startMoney;
        lives = startLives;
        ShowMoney();
        ShowLives();
    }

    public bool TrySpend(int amount)
    {
        if (amount > money)
        {
            return false;
        }

        money -= amount;
        ShowMoney();
        return true;
    }

    public void Earn(int amount)
    {
        money += amount;
        ShowMoney();
    }

    void OnKilled(Enemy enemy)
    {
        Earn(enemy.data.reward);
    }

    void OnReachedBase(Enemy enemy)
    {
        lives -= enemy.data.damage;
        ShowLives();
    }

    void ShowMoney()
    {
        moneyText.text = "Money: " + money;
    }

    void ShowLives()
    {
        livesText.text = "Lives: " + lives;
    }
}

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

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