Una oleada
Lección 5 de 25 del curso Juego de Unity: Defensa de torres de Coddy.
El Grunt y el Runner ahora son prefabs, junto con un Tank y un Boss, y hay un Spawner en WP0. Una oleada se define con unos pocos datos: qué enemigo, cuántos y a qué distancia entre sí. Así que Wave es una clase [System.Serializable], y el spawner mantiene una List<Wave> que el Inspector rellena con las ocho oleadas del juego. Sin [System.Serializable], Unity no puede rellenar la lista y esta se queda vacía.
La generación de enemigos con intervalos es una corrutina: yield return new WaitForSeconds(...) espera sin detener el juego. Un prefab no puede apuntar a los puntos de referencia de la escena, así que el spawner le asigna a cada enemigo nuevo sus propios puntos justo después de Instantiate:
Enemy enemy = Instantiate(wave.enemy, waypoints[0].position, Quaternion.identity);
enemy.waypoints = waypoints;
yield return new WaitForSeconds(wave.spacing);Desafío
FácilEnvía la primera oleada de Grunts por el camino.
- En
Wave.cs, coloca[System.Serializable]enWave, conpublic Enemy enemy;,public int count;ypublic float spacing;. - En
WaveSpawner, añade[SerializeField] private List<Wave> waves;y[SerializeField] private Transform[] waypoints;. - Desde
Start, ejecuta una corrutina que generewaves[0].countenemigos como antes.
Pulsa «Jugar»: seis Grunts salen marchando, con 1.2 segundos de diferencia. Después, pulsa «Comprobar».
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
{
}
Todas las lecciones de Juego de Unity: Defensa de torres
Practica por tu cuenta: Playground de Unity