Menu
CoddyTech

Vagues

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

Les ennemis arrivent par vagues : un groupe d’ennemis du même type, espacés le long du chemin, puis une pause avant le groupe suivant. Une vague se résume à quelques nombres ; c’est donc une classe [System.Serializable], et le spawner conserve une List<Wave> que l’Inspector affiche sous forme de lignes à remplir. Sans [System.Serializable], Unity ne peut pas enregistrer une Wave, l’Inspector n’affiche pas la liste, et celle-ci reste vide.

Le minutage est géré par une coroutine : une boucle qui fait apparaître les ennemis, puis cède la main avec new WaitForSeconds(...) pour attendre sans interrompre le reste du jeu. Un spectacle de feux d’artifice fonctionne de la même façon, salve après salve, avec une pause après chacune :

IEnumerator Show()
{
    foreach (Salvo salvo in salvos)
    {
        for (int i = 0; i < salvo.rockets; i++)
        {
            Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
            yield return new WaitForSeconds(salvo.gap);
        }
        yield return new WaitForSeconds(pause);
    }
}

Les ennemis sont maintenant des prefabs. Les champs d’un prefab ne peuvent pointer que vers des ressources et des objets à l’intérieur du prefab ; le tableau waypoints d’un nouvel ennemi est donc vide. Le spawner possède le chemin et le transmet à chaque ennemi juste après Instantiate. Instantiate renvoie le type qu’on lui fournit ; avec un champ de prefab de type Enemy, il renvoie donc le nouvel Enemy, prêt à être configuré.

challenge icon

Défi

Facile

Le Grunt et le Runner sont maintenant des prefabs, rejoints par un Tank et un Boss avec leurs propres EnemyData. L’objet Spawner se trouve sur WP0. Envoyez les ennemis par vagues :

  1. Dans Wave.cs, faites de Wave une classe sérialisable avec les champs publics enemy (un Enemy : le prefab), count (un int) et spacing (un float, le nombre de secondes entre deux ennemis).
  2. Dans WaveSpawner, ajoutez trois champs privés sérialisés : waves (une List<Wave>), waypoints (un tableau de Transform) et timeBetweenWaves (un float).
  3. Depuis Start, lancez une coroutine qui parcourt les vagues dans l’ordre. Pour chacune : attendez timeBetweenWaves, consignez le numéro de la vague à partir de 1, sous la forme Wave 1, puis faites apparaître ses count ennemis au premier waypoint, attribuez à chacun le tableau waypoints, et attendez spacing après chaque ennemi.
  4. Après la dernière vague, consignez All waves sent.

L’Inspector renseigne les huit vagues du jeu et une pause de 8 secondes. Appuyez sur Play et regardez arriver les premières vagues, puis cliquez sur Check.

Essayez vous-même

using UnityEngine;

// Viendra plus tard : envoie les ennemis sur le chemin par vagues.
public class WaveSpawner : MonoBehaviour
{
}
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 Jeu Unity : défense de tours