Aprende a mover enemigos en Unity con la técnica de waypoints. Organiza la jerarquía, etiqueta objetos y programa un script para que tus dragones recorran el escenario y, a ratos, apunten al jugador. Todo con tags, arrays y selección aleatoria, de forma clara y práctica.
¿Cómo funciona el movimiento con waypoints en Unity?
Los puntos de ruta son objetos invisibles que guían a un enemigo de uno a otro. Pueden ser fijos (ida y vuelta) o aleatorios para hacer el comportamiento más interesante. Con una misma etiqueta, como "waypoint", es fácil localizarlos desde el script y administrar el recorrido.
Los waypoints obligan al enemigo a moverse entre posiciones.
Las rutas fijas son previsibles; las aleatorias aportan variedad.
Las etiquetas unifican la búsqueda de objetos en escena.
¿Cómo crear y ubicar waypoints sin errores?
Primero ordena la jerarquía para evitar el caos. Un padre agrupa todos los puntos. Luego, duplica y reparte por el escenario, cuidando alturas y colisiones con el terreno.
Añadir la etiqueta "waypoint" y asignarla a cada hijo.
Duplicar con Command o Control D.
Distribuir por distintas zonas del mapa.
Revisar en vista lateral para que ningún punto quede dentro de montañas o suelo.
Mantenerlos a una altura razonable. No enterrarlos.
¿Cómo programar el script follow destination?
El script FollowDestination gestionará la selección de destinos. Primero declara variables, después inicializa en Start y finalmente elige un punto aleatorio. En el siguiente paso, dentro de Update, se seguirá el destino actual y, al estar muy cerca, se cambiará a otro punto o incluso al jugador.
¿Qué variables necesitas para destinos, velocidad y jugador?
Array de destinos: destinations de tipo GameObject[].
Destino actual: destination de tipo Transform.
Velocidad configurable: speed de tipo float (por defecto, 5).
Referencia al jugador: player de tipo GameObject.
publicclassFollowDestination:MonoBehaviour{GameObject[] destinations;// Puntos de ruta etiquetados como "waypoint".Transform destination;// Destino actual.publicfloat speed =5f;// Velocidad (m/s aprox.).GameObject player;// Referencia al jugador.}
¿Cómo inicializar en start con etiquetas?
Aprovecha las tags para localizar todos los puntos de ruta a la vez, y una única búsqueda para el jugador con FindWithTag.
voidStart(){ destinations = GameObject.FindGameObjectsWithTag("waypoint"); player = GameObject.FindWithTag("jugador");// Una única etiqueta para el jugador.}
Usa FindGameObjectsWithTag para un conjunto.
Usa FindWithTag cuando existe un único objeto.
Mantén las etiquetas consistentes en la escena.
¿Cómo elegir un destino aleatorio y preparar el siguiente paso?
Selecciona un índice aleatorio entre 0 y destinations.Length con Random.Range y toma el transform del objeto elegido. Guardar el último destino facilita cambiar al siguiente cuando el dragón llegue.
voidStart(){ destinations = GameObject.FindGameObjectsWithTag("waypoint"); player = GameObject.FindWithTag("jugador");// Elegir un punto de ruta aleatorio como destino inicial. destination = destinations[Random.Range(0, destinations.Length)].transform;}
Random.Range(0, destinations.Length) devuelve un índice válido.
El movimiento hacia el destino se implementará en Update.
Al estar muy cerca, cambia a otro waypoint o al player para aumentar el riesgo.
¿Dónde colocarías tus waypoints para lograr patrones de ataque interesantes? Cuéntalo en los comentarios y comparte tu enfoque.