Pathfinding: malla de navegación basada en mosaicos


8

Estoy desarrollando un RTS basado en mosaico en tiempo real. Este es un mapa de ejemplo:

Mapa

Este mapa consta de 4 regiones con 256 fichas cada una. Los azulejos azules representan obstáculos. Las unidades pueden moverse en las ocho direcciones estándar. Las unidades están unidas a azulejos; Una ficha puede contener una unidad.

Estos son algunos ejemplos de los caminos ideales que estoy buscando. Cosas típicas de A *:

ingrese la descripción de la imagen aquí

Mi pregunta es: ¿es aplicable una malla de navegación a un RTS basado en mosaico? Solo he visto mapas de navegación utilizados en juegos donde las unidades se mueven libremente y no están unidas a una cuadrícula de fichas. ¿Cómo se vería la malla de navegación en este mapa en particular? Una imagen de ejemplo sería excelente.


Por lo que vale, parece recordar haber escuchado que parte de la "rareza" de Starcraft I se debió a la decisión tardía de cambiar de 2d a isométrica 3d: ¡todo el código de ruta fue escrito esperando terreno en 2d!
Raven Dreamer

Respuestas:


10

Sí, las mallas de navegación siguen siendo aplicables a los juegos basados ​​en mosaicos. Aunque, se utilizarían principalmente como una optimización. Por ejemplo, he convertido la parte inferior izquierda de su imagen para usar una malla de navegación:

ingrese la descripción de la imagen aquí

En este caso, cada cuadrado verde sería un nodo de navegación. Como puede ver, esto reduce drásticamente la cantidad de nodos que A * necesita procesar. Las unidades pueden simplemente dirigirse al centro de cada uno de estos nodos.

La generación de estos nodos es un problema diferente. Puede ser complejo decidir cómo formar los nodos. Hay algunas preguntas en el sitio donde puede encontrar algunas ideas sobre cómo le gustaría implementar eso:

Subdividir un polígono en cajas de diferentes tamaños.

Identificar patrones cuádruples en una matriz bidimensional

/programming/20220215/minimum-number-of-rectangles-in-shape-made-from-rectangles

Esta malla de navegación también se puede utilizar esencialmente como una búsqueda de ruta de "primer paso". Si se encuentra una ruta a través de la malla de navegación, sabrá que existe una ruta. Esta es una prueba más rápida para ver si hay dos puntos conectados.


1
Me cuesta entender cómo esto es superior al A * puro. ¿Cómo optimizaría su navegador la ruta de cálculo para la ruta verde en la respuesta original, por ejemplo?
mario_sunny

44
La ruta verde tiene 15 nodos, la ruta de malla tiene 5. Esto ni siquiera incluye el número de callejones sin salida que deben analizarse al encontrar esa ruta. El objetivo de la malla de navegación no es necesariamente hacer las rutas más directas, es reducir la cantidad de nodos que A * tiene que buscar, lo que aumenta drásticamente la velocidad de A *. Existen estrategias para colocar nodos en su malla de navegación que pueden encontrar un equilibrio entre rutas directas y menos nodos (por ejemplo, nodos en cada esquina de todos los obstáculos). También hay optimizaciones que se pueden realizar en la ruta finalizada.
MichaelHouse

Estoy empezando a entender. ¿La ruta verde se vería diferente con la optimización navmesh? Parece estar insinuando que la unidad se moverá al centro de cada rectángulo en su camino hacia el punto final. ¿Está sugiriendo que las optimizaciones posteriores a A * acortarían el camino?
mario_sunny

3
Sí, si usaras el centro de cada nodo, la ruta se vería diferente. Sin embargo, puede decidir usar algo que no sea el centro (como podría usar las esquinas de cada nodo). O puede hacerlo para que sus nodos no sean más grandes que cuatro cuadrados (haciendo menos nodos pero haciendo que los nodos sigan la geometría más cerca). O puede realizar algunas optimizaciones en la ruta para ser más directo después de encontrarlo. Incluso puede usar la malla de navegación como primer paso, luego usar A * para atravesar cada nodo (lo que le permite "trazar mientras avanza", mientras la unidad se mueve, extendiendo el impacto en el rendimiento a lo largo del tiempo).
MichaelHouse
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.