¿Cómo implemento formaciones grupales en un RTS 3D?

14

Logré obtener trabajo de búsqueda de ruta para una sola unidad, y logré evitar la colisión agente-agente, pero ahora necesito poder enviar un grupo de agentes a algún lugar.

Esta es mi configuración hasta ahora:

  • Waypoint pathfinding
  • La distancia mínima entre dos nodos es un poco más grande que el radio de la esfera límite más grande permitido para un agente.
  • Los agentes evitan las colisiones con otros agentes haciendo un comportamiento de dirección I basado en clearpath

Así que ahora necesito enviar a mis agentes a algún lugar del grupo. He leído algunas publicaciones que dicen que una forma de hacerlo es crear un líder de grupo y dar a las otras unidades compensaciones a su posición.

Pero entonces el problema es, ¿qué pasa si no se puede lograr la formación del grupo? por ejemplo, desea formar un rectángulo, pero en la posición de destino hay una estructura cercana que le impide crear una configuración de rectángulo.

xcrypt
fuente
2
Estoy en el trabajo, así que no tengo tiempo para escribir una respuesta adecuada, pero aquí están mis cero centavos: use un algoritmo de flocado de Boids y luego represente los obstáculos como objetos de los que se rechazan los Boids.
Clavador
@Nailer, el algoritmo de flocado funcionaría mientras se estén moviendo, pero ¿cómo podría detectar si su posición final es "correcta" y notificarles que pueden dejar de moverse? No se preocupe, puedo esperar su respuesta;)
xcrypt

Respuestas:

13

En realidad, hay un artículo bastante bueno sobre esto en Gamasutra. Y cubre temas como formaciones y resolución de colisiones:

ingrese la descripción de la imagen aquí

Y otro artículo de ellos sobre el mismo tema, que es un poco más corto pero tiene más ejemplos de pseudocódigo:

ingrese la descripción de la imagen aquí

Finalmente, una cosa ingeniosa en la que pensar al implementar su sistema es la idea de que un "Flow Field" Supreme Commander 2 usó esto ; Y se basa en la investigación de Crowd Flows de la Universidad Estatal de Washington .

MichaelHouse
fuente
Gracias, he visto las continuas multitudes encontrando cosas del comandante supremo, pero creo que me quedaré con lo que tengo. Lo intentaré cuando tenga un poco más de experiencia, porque sí, se ve realmente ingenioso; D
xcrypt
2

Creo que puedes tener una "entidad de bandada" invisible que es el jefe de la formación, y hacer que las otras criaturas se posicionen en relación con esta entidad. Si esta entidad puede rotar, entonces la posición relativa también rotará.

... oopos .. ya lo estás haciendo.

¿Qué hay de esto?

¿Por qué no puede calcular nuevas posiciones para las entidades que colisionan? No necesito ser elegante, tal vez simplemente trazar una línea desde el punto original deseado y el líder, y mover la posición deseada al centro de esta línea. Prueba de nuevo para colisión.

Tei
fuente
Bueno, eso es más o menos lo que dije en mi pregunta: D La parte difícil es cómo manejar la colisión de la formación con el terreno / obstáculos / estructuras
xcrypt
¡Lo siento !, he actualizado mi respuesta con una nueva idea.
Tei
No lo entiendo, ¿simplemente reduciría a la mitad la magnitud del vector de desplazamiento y seguiría verificando si esta es una posición libre de colisión? Es muy probable que eso falle en muchos casos
xcrypt