Actualmente estoy desarrollando un juego similar a Diablo para plataforma móvil (iphone5 +).
Una simple búsqueda A * encontrará el camino, pero aún debe tenerse en cuenta la prevención de colisiones.
Habrá alrededor de 50 monstruos activos al mismo tiempo, por lo que el rendimiento es muy importante.
Encontré algunos métodos que podrían funcionar.
NavMesh + RVO
La biblioteca de refundición / desvío funciona bien por
pathfinding
parte, pero su simulación de multitudes alcanza rápidamente el límite (más de 5 ms para 30 agentes).Otra biblioteca RVO2 parece estar bien (menos de 2 ms para 50 agentes), pero la biblioteca tiene algunos problemas de licencia.
Campos de flujo + motor de física
Muchos juegos de RTS usan este método, pero parece que se requiere un motor de física para resolver las colisiones. Si muchos agentes no comparten un objetivo común, este método podría costar más que la ruta tradicional A *.
Comportamientos de dirección + motor de física
Steering Behaviors incluye muchos conceptos, creo que
simple avoidance behavior
podrían funcionar (solo gire a la izquierda / derecha si hay algo al frente), pero el método aún requiere un motor de física para trabajar juntos.
Todavía no estoy seguro de cuál usar, tal vez existan otros métodos para encontrar caminos y evitar colisiones.
PS Halo:Spartan Strike
usa Havok AI (¿basado en RVO?), Pero no vi muchos enemigos en ese juego, así que me pregunto si el primer método (NavMesh + RVO) funcionará bien en la plataforma móvil.
Respuestas:
Esta es una pregunta bastante interesante, y voy a tratar de contribuir con lo que pueda.
Primero, creo que tienes que definir claramente los límites para el juego que estás tratando de crear y definir esas preguntas (algunas ya pueden haber sido respondidas).
Para citar una respuesta de aquí sobre cómo se realiza la búsqueda de rutas en Starcraft 2:
Volviendo a sus 3 proposiciones:
En algunas notas sobre los comportamientos de dirección, puede definir tantas fuerzas de dirección como necesite, con las áreas que desee. Necesita al menos 3, para el congregación / atracción / repulsión, pero probablemente haya más interesantes.
Luego, trate de encontrar una biblioteca que controle los comportamientos para ver si se ajusta a sus necesidades ( ¿de esta manera ? Realmente no conozco ninguna, pero existe).
Si la biblioteca no se ajusta a tus necesidades, ¡estás listo para divertirte! Pero hay suficientes recursos y algoritmos para implementar comportamientos de congregación usted mismo. Ejemplo 1 Ejemplo 2
Si elige implementarse usted mismo, sepa que hay una buena optimización por hacer, ya que el alcance de su agente se reduce, por ejemplo, por su ubicación en el lote. De todos modos, debe incluirse en algunos de los algoritmos.
Bueno, eso es lo mejor de mi conocimiento, de todos modos no estoy seguro
fuente
Si las rutas enemigas no son muy dinámicas (Dinámica sería cada pareja de agentes están atacando diferentes objetivos y las rutas a esos objetivos deben actualizarse cada dos cuadros)
Entonces haría una combinación de campos de flujo y comportamientos de dirección si el rendimiento es su principal preocupación. Hay algunos temas más complicados involucrados, como la división en el espacio de sus agentes, por lo que encontrar vecinos es más fácil, pero es su mejor apuesta para el rendimiento. (eliminando su búsqueda A * y usando campos de flujo para dirigir a sus agentes)
Esos dos algoritmos combinados generalmente se consideran la solución más optimizada para escenas densas de agente con poca ruta dinámica.
Evitaría la física sin importar su opción final, ya que puede volverse pesada.
La colisión entre agentes puede manejarse casi por completo mediante comportamientos de dirección y los campos de flujo reducen el peso de 50 agentes que calculan rutas. Sin embargo, tenga en cuenta que los campos de flujo se vuelven cada vez más caros cuanto mayor sea el tamaño de su mapa, y más pequeño el tamaño de su cuadrícula, y más dinámica debe ser su selección de objetivos.
fuente