Menu
CoddyTech

Oleadas de enemigos

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 44 de 50.

challenge icon

Desafío

Intermedio

Ahora los enemigos aparecen en oleadas, y las oleadas son datos. Conserva todo lo de las lecciones anteriores. La arena ya no tiene enemigos propios: los prefabs Grunt y Dasher llevan tus scripts, hay cuatro puntos de aparición en las esquinas y el objeto Spawner del centro tiene el script WaveSpawner.

  • En WaveSet.cs, añade una clase Wave con [System.Serializable], que tenga public Enemy enemy (el prefab), public int count y public float spacing. WaveSet es un ScriptableObject con [CreateAssetMenu], una public List<Wave> waves y un public float restBetweenWaves. El recurso Arena de la escena contiene tres oleadas (3 grunts separados por 0.5 s, 2 dashers separados por 1 s, 5 grunts separados por 0.4 s) y un descanso de 2 segundos.
  • Enemy obtiene public static event Action<Enemy> Died, que se invoca con el enemigo justo antes de destruirlo.
  • WaveSpawner tiene waveSet y spawnPoints asignados desde el Inspector, y public int Wave { get; private set; }, el número de la oleada en curso. Desde Start, una corrutina ejecuta las oleadas del recurso en orden. Para cada una: suma 1 a Wave y lo registra, como Wave 1; genera los enemigos de la oleada, según count, separados por spacing segundos, con el enemigo i (desde 0) en spawnPoints[i % spawnPoints.Length]; espera hasta que no quede ningún enemigo con vida; después descansa restBetweenWaves segundos. Después de la última oleada, el conjunto vuelve a empezar desde la primera, y Wave sigue contando: 4, 5 y así sucesivamente.
  • Lleva la cuenta de los enemigos con vida usando el evento Died: suscríbete en OnEnable y cancela la suscripción en OnDisable. El spawner solo lee el recurso: en el Editor, si modificas un recurso mientras el juego está en ejecución, el cambio permanece en el recurso después de Play.

Pulsa Play y sobrevive a unas cuantas oleadas; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class WaveSpawner : MonoBehaviour
{
    // En una lección posterior se completará esto: enviará las oleadas a la arena.
}

Todas las lecciones de Arquitectura de juegos en Unity