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é.
Défi
FacileLe 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 :
- Dans
Wave.cs, faites de Wave une classe sérialisable avec les champs publicsenemy(un Enemy : le prefab),count(un int) etspacing(un float, le nombre de secondes entre deux ennemis). - Dans
WaveSpawner, ajoutez trois champs privés sérialisés :waves(uneList<Wave>),waypoints(un tableau de Transform) ettimeBetweenWaves(un float). - Depuis
Start, lancez une coroutine qui parcourt les vagues dans l’ordre. Pour chacune : attendeztimeBetweenWaves, consignez le numéro de la vague à partir de 1, sous la formeWave 1, puis faites apparaître sescountennemis au premier waypoint, attribuez à chacun le tableauwaypoints, et attendezspacingaprès chaque ennemi. - 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
{
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.