Volver al inicio

Comportamientos de dirección en Unity: navegación de agentes

El artículo describe la aplicación de Comportamientos de Dirección para navegar agentes-pez en un laberinto submarino Unity 3D. Algoritmos seek, pursuit, evade se detallan con fórmulas matemáticas. El enfoque asegura movimiento suave y reactivo sin planificación de rutas global.

Comportamientos de Dirección de Navegación de Agentes en Unity 3D
Advertisement 728x90

Implementación de Comportamientos de Dirección para la Navegación de Agentes en Unity 3D

Los Comportamientos de Dirección proporcionan navegación reactiva para agentes autónomos en entornos dinámicos. En un proyecto de Unity, los agentes—tres tipos de peces—se mueven por un laberinto submarino, reaccionando al submarino del jugador. Cada tipo utiliza una combinación de comportamientos básicos: búsqueda, persecución, huida, deambulación y evitación de colisiones. Esto permite trayectorias suaves sin necesidad de planificación de rutas global.

El enfoque se basa en cálculos vectoriales locales en cada fotograma. Un agente ajusta su velocidad y orientación hacia una dirección deseada, considerando objetivos, amenazas y obstáculos. La combinación de reglas simples genera movimientos complejos y naturales.

Tipos Básicos de Comportamientos de Dirección

Los Comportamientos de Dirección se dividen en tipos fundamentales, implementados mediante matemáticas vectoriales:

Google AdInline article slot
  • Búsqueda: calcular un vector desde la posición del agente hasta el objetivo, normalizarlo y aplicarlo como la dirección de velocidad deseada.
  • Persecución: predecir la posición del objetivo basándose en su velocidad y dirección, luego buscar el punto predicho.
  • Huida: persecución en la dirección opuesta desde la posición de amenaza predicha.
  • Deambulación: una dirección base con desviaciones aleatorias aplicadas dentro de un radio de disco en una esfera delante del agente.
  • Evitación de colisiones: escanear rayos hacia adelante, desviándose del obstáculo más cercano.

Estos comportamientos se suman con pesos para producir la fuerza de dirección final, limitada por una fuerza máxima.

En el entorno submarino, la evitación de colisiones es crítica debido a las paredes del laberinto. La deambulación añade variabilidad para los peces comestibles fuera de la zona del submarino.

Modelos de Comportamiento para Agentes Pez

Los peces se dividen en tipos comestibles, peligrosos y venenosos. Cada tipo corresponde a un algoritmo basado en Comportamientos de Dirección:

Google AdInline article slot
  • Seguimiento (para todos los tipos inicialmente): búsqueda hacia el submarino con un ligero ruido aleatorio para evitar linealidad.
  • Persecución (peligrosos/venenosos): persecución con suavizado de dirección gradual.
  • Evitación (comestibles): transición de búsqueda a huida + desplazamiento lateral al entrar en la zona de interacción.

La suavidad se asegura interpolando las direcciones actual y deseada con un coeficiente α ∈ [0,1]. La velocidad está limitada por v_max, y se considera el tiempo de vida t_life ≤ T_max.

Implementación Matemática de los Algoritmos

Notaciones:

  • x_s — posición del submarino
  • x_f — posición del pez
  • v_f — velocidad del pez
  • Δt — paso de tiempo
  • R — radio de la zona
  • v_max — velocidad máxima
  • u — vector hacia arriba
  • t_life — tiempo de vida
  • T_max — tiempo de vida máximo

Distancia: d = ||x_s - x_f||

Google AdInline article slot

Vector unitario al objetivo: e_t = (x_s - x_f) / ||x_s - x_f||

Seguimiento

d = ||x_s - x_f|| > R

e_follow = e_t

Con ruido: e_follow = normalizar(e_follow + k_r r), donde r es un vector aleatorio ||r|| < ε

Persecución

e_p = e_t

Suavizado: e_new = normalizar((1-α) e_cur + α e_p)

v_f = v_max * e_new

Evitación

Si d > R: e = e_follow*

Sino: e_evade = -e_t + desplazamiento_lateral (perpendicular a u × e_t)

v_f = v_max * normalizar(e_evade)

Actualización de posición: x_f += v_f * Δt

Estas fórmulas se integran en el Update() del agente en Unity. La evitación de colisiones se añade como una fuerza de dirección prioritaria al detectar impactos de raycast.

Integración en Unity y Optimización

En Unity, la implementación usa Transform para posición/rotación, Rigidbody para física (opcional). La fuerza de dirección se aplica mediante AddForce o estableciendo la velocidad directamente.

Aspectos clave de rendimiento:

  • Cálculos locales sin navmesh.
  • Limitar raycasts para evitación (3-5 rayos en un cono).
  • Pooling de peces para generación/eliminación.

El comportamiento se adapta al laberinto 3D: los movimientos verticales tienen en cuenta el vector u, los obstáculos—paredes de Collider.

Para desarrolladores senior: extender el modelo con llegada (ralentizar cerca del objetivo), separación (distancia entre agentes), cohesión/enjambre para grupos de peces.

Conclusiones Clave

  • Localidad: los Comportamientos de Dirección evitan planificación costosa tipo A*, adecuados para 50+ agentes.
  • Combinabilidad: sumar fuerzas con pesos permite superponer comportamientos (deambulación + búsqueda + evitación).
  • Reactividad: adaptación instantánea al movimiento del submarino sin replanificación.
  • Suavidad: la interpolación evita temblores, realista para entornos submarinos.
  • Extensibilidad: fácil añadir seguimiento de líder o comportamientos grupales.

— Editorial Team

Advertisement 728x90

Leer después