Ejercicio propuesto 5: Instanciar enemigos
Añade la interactividad necesaria para que los enemigos se generen en posiciones aleatorias del plano uno cada 5 segundos.
Para instanciar enemigos, vamos a necesitar crear un objeto vacío (
GameManager) y
asociarle un nuevo script llamado
GameManager que se encargue de gestionar la creación de enemigos de forma secuencial.
Además, debemos crear un
prefab del enemigo, arrastrando el objeto
Enemigo a la carpeta
Assets > Prefabs y borrándolo de la escena.
El código del script
GameManager sería el siguiente:
using System.Collections;
using UnityEngine;
public class GameManager : MonoBehaviour {
public GameObject enemigo;
public Vector3 posicion;
public int numeroEnemigos;
public float esperaInicial;
public float esperaEntreEnemigos;
public float esperaEntreOlas;
void Start() {
//LLamo a la rutina de crear enemigos
StartCoroutine(crearEnemigos());
}
IEnumerator crearEnemigos()
{
//Espero un tiempo antes de crear enemigos
yield return new WaitForSeconds(esperaInicial);
//Bucle durante toda la vida del juego
while (true)
{
//Bucle de número de enemigos
for (int i = 0; i < numeroEnemigos; i++)
{
//Instancio el enemigo en una posición aleatoria del tablero
Vector3 posicionEnemigo = new Vector3(Random.Range(-posicion.x, posicion.x), posicion.y, Random.Range(-posicion.z, posicion.z));
Quaternion rotacionEnemigo = Quaternion.identity;
Instantiate(enemigo, posicionEnemigo, rotacionEnemigo);
//Espero un tiempo entre la creación de cada enemigo
yield return new WaitForSeconds(esperaEntreEnemigos);
}
//Espero un tiuempo entre oleadas de enemigos
yield return new WaitForSeconds(esperaEntreOlas);
}
}
}
Para que funcione, deberás ajustar los tiempos de espera indicados en la
Inspector window del objeto
GameManager, así como asociar el
prefab Enemigo a la variable pública correspondiente:
No obstante el ejercicio sería bastante mejorable haciendo que los enemigos no se pudieran instanciar sobre las barreras.