Navigation Pathfinder
Tipo: Exec (In → Out)
Categoría: AI
Execution Order: 52 (después de AI State Machine, antes de Navigation Follow Path)
Calcula un camino (path) mediante BFS sobre un grafo de waypoints de escena. El resultado se almacena en ai_nav_path para que Navigation Follow Path lo siga.
Propiedades
| Propiedad | Tipo | Por defecto | Descripción |
|---|---|---|---|
| Waypoint Prop | String | "waypoint" |
Nombre de la propiedad BGE que identifica los waypoints |
| Connect Radius | Float (≥0.5) | 6.0 |
Distancia máxima para conectar dos waypoints como vecinos |
| Repath Interval | Float (≥0.05) | 0.5 |
Segundos entre recálculos del path |
| Move Threshold | Float (≥0.1) | 1.0 |
El destino debe moverse esta distancia para forzar un recálculo anticipado |
| Debug | Bool | False |
Imprimir info de path por consola |
Sockets
| Socket | Dirección | Tipo |
|---|---|---|
| In | Entrada | Exec |
| Out | Salida | Exec |
Variables publicadas
| Variable | Tipo | Descripción |
|---|---|---|
self.ai_nav_path |
list[Vector] | Lista de posiciones del camino |
self.ai_nav_index |
int | Índice del waypoint actual (inicializado a 0) |
self.ai_nav_repath_timer |
float | Segundos desde el último recálculo |
Variables leídas
| Variable | Fuente |
|---|---|
ai_move_target |
AI State Machine |
ai_target_pos |
Enemy Perception (fallback) |
ai_state |
AI State Machine |
Comportamiento
Activación
El pathfinder solo opera cuando:
- ai_state es CHASE o SEARCH
- Existe un ai_move_target válido (Vector)
En otros estados (IDLE, PATROL, DEAD), limpia el path y lo deja vacío.
Construcción del grafo
- Recolecta todos los objetos de escena con la propiedad BGE
waypoint_prop. - Conecta pares de waypoints cuya distancia ≤
connect_radius. - Resultado: grafo de proximidad no dirigido.
Los waypoints deben tener la propiedad BGE añadida desde el editor de propiedades de Range. Por ejemplo: propiedad
waypoint = True(tipo Boolean).
BFS
- Encuentra el waypoint más cercano a la posición propia → nodo inicio.
- Encuentra el waypoint más cercano al destino → nodo fin.
- BFS desde inicio hasta fin → lista de nombres de waypoints.
- Convierte nombres a posiciones Vector →
ai_nav_path. - Añade la posición exacta del destino al final del path.
Fallback sin waypoints
Si no hay waypoints en escena, el path es simplemente [destino] — movimiento en línea recta.
Condiciones de recálculo
El path se recalcula cuando:
- El timer de cooldown (_nav_repath_cd) llega a 0 (cada repath_interval segundos)
- El destino se ha desplazado más de move_threshold unidades respecto al último cálculo
Setup de waypoints en escena
- Crea Empty objects o cualquier objeto en la escena.
- Añade la propiedad BGE (ej.
waypoint) a cada uno. - Colócalos en la zona de patrulla con espacio ≤
connect_radiusentre vecinos. - El pathfinder los detecta automáticamente en runtime.
WP_A ──── WP_B ──── WP_C
└─────────────────┘
(si distancia ≤ connect_radius, se conectan)
Uso típico
[AI State Machine] → [Navigation Pathfinder] → [Navigation Follow Path] → [Enemy Movement]
Notas
- El grafo se reconstruye en cada recálculo, no se cachea entre frames (los waypoints pueden moverse).
- Si dos waypoints están dentro del
connect_radiuspero hay un muro entre ellos, el pathfinder los conectará igualmente — no hace raycast entre waypoints. Para mapas con muros complejos, ajustaconnect_radiuso coloca waypoints estratégicamente. - El path incluye siempre la posición exacta del destino al final, por lo que el enemigo llega al punto exacto aunque el waypoint más cercano no esté muy cerca.
ai_nav_indexse resetea a 0 en cada nuevo recálculo. Navigation Follow Path lo incrementa conforme avanza.