jairogarcíarincón

06/09/2021
Contenidos
- El mundo
- Moviendo al jugador a un punto marcado con el ratón
- Persiguiendo al jugador
- Mover el jugador con las teclas
- Crear más enemigos
- Coleccionable
- Destruir al jugador
- Instanciar enemigos
- Estilo Pacman
- Disparar a los enemigos
- Acceso mediante formulario
- Acceso mediante API
- Volcado de resultados mediante API
- Práctica DAM: Acceso a APIs
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:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
Instantiate(enemigo, posicionEnemigo, Quaternion.identity); | |
//Espero un tiempo entre la creación de cada enemigo | |
yield return new WaitForSeconds(esperaEntreEnemigos); | |
} | |
//Espero un tiempo 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.
Publicado el 22 de Junio de 2025
unityc#visual studio