Menu
CoddyTech

Oleadas

Lección 4 de 18 del curso Juego de Unity: defensa de torres de Coddy.

Los enemigos aparecen en oleadas: un grupo de un tipo, espaciados a lo largo del camino, después un descanso antes del siguiente grupo. Una oleada consta de unos pocos números, así que es una clase [System.Serializable], y el generador de oleadas mantiene un List<Wave> que el Inspector muestra como filas para rellenar. Sin [System.Serializable], Unity no puede guardar una Wave, el Inspector no muestra la lista y esta permanece vacía.

La temporización se gestiona con una corrutina: un bucle que genera elementos y después cede el control con new WaitForSeconds(...) para esperar sin detener el resto del juego. Un espectáculo de fuegos artificiales funciona de la misma manera con sus salvas, con una pausa después de cada una:

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);
    }
}

Ahora los enemigos son prefabricados. Los campos de un prefabricado solo pueden apuntar a recursos y a objetos dentro del prefabricado, así que el arreglo waypoints de un enemigo nuevo está vacío. El generador de oleadas es dueño del camino y se lo pasa a cada enemigo justo después de Instantiate. Instantiate devuelve el tipo que se le proporciona, así que con un campo de prefabricado de tipo Enemy devuelve el nuevo Enemy, listo para configurarlo.

challenge icon

Desafío

Fácil

Grunt y Runner ahora son prefabs, junto con Tank y Boss, cada uno con su propio EnemyData. El objeto Spawner está en WP0. Envía a los enemigos en oleadas:

  1. En Wave.cs, convierte Wave en una clase serializable con los campos públicos enemy (un Enemy: el prefab), count (un int) y spacing (un float, los segundos entre dos enemigos).
  2. En WaveSpawner, añade tres campos privados serializados: waves (una List<Wave>), waypoints (un array de Transform) y timeBetweenWaves (un float).
  3. Desde Start, ejecuta una coroutine que recorra las oleadas en orden. Para cada una: espera timeBetweenWaves, registra el número de la oleada empezando por 1, como Wave 1, luego genera sus count enemigos en el primer waypoint, asigna waypoints a cada uno y espera spacing después de cada enemigo.
  4. Después de la última oleada, registra All waves sent.

El Inspector rellena las ocho oleadas del juego y una pausa de 8 segundos. Pulsa Play y observa cómo llegan las primeras oleadas; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

// Se implementará más adelante: envía a los enemigos por el camino en oleadas.
public class WaveSpawner : MonoBehaviour
{
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Unity: defensa de torres