Cómo crear waypoints en Unity para enemigos

Clase 29 de 33Curso de VR con Unity

Resumen

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.

  • Crear un objeto vacío padre llamado "waypoints".
  • Posicionarlo en 0,0,0 para referencia.
  • Dentro, crear objetos vacíos hijos (por ejemplo, "WP").
  • 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.
public class FollowDestination : MonoBehaviour
{
    GameObject[] destinations;        // Puntos de ruta etiquetados como "waypoint".
    Transform destination;            // Destino actual.
    public float 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.

void Start()
{
    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.

void Start()
{
    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.