Comment implémenter des formations de groupe dans un RTS 3D?


14

J'ai réussi à obtenir un travail de recherche de chemin pour une seule unité, et j'ai réussi à éviter la collision agent-agent, mais maintenant je dois pouvoir envoyer un groupe d'agents à un certain endroit.

Voici ma configuration jusqu'à présent:

  • Recherche de chemin de waypoint
  • La distance minimale entre deux nœuds est un peu plus grande que le plus grand rayon de sphère limite autorisé pour un agent.
  • Les agents évitent les collisions avec d'autres agents en faisant un comportement de pilotage basé sur le chemin clair

Alors maintenant, je dois envoyer mes agents quelque part en groupe. J'ai lu quelques articles disant qu'une façon de le faire est de créer un chef de groupe et de donner aux autres unités des compensations à sa position.

Mais alors le problème est, et si la formation de groupe ne peut pas être réalisée? par exemple, vous voulez former un rectangle, mais à la position cible, il y a une structure à proximité qui vous empêche de créer une configuration de rectangle.


2
Je suis au travail donc je n'ai pas le temps de rédiger une bonne réponse, mais voici mon point zéro deux cents: Utilisez un algorithme de flocage Boids et représentez les obstacles comme des objets à partir desquels les Boids sont repoussés.
Nailer

@Nailer, l'algorithme de flocage fonctionnerait tant qu'ils bougeraient, mais comment pourrais-je détecter si leur position finale est "correcte" et les informer qu'ils peuvent arrêter de bouger? Ne vous inquiétez pas, je peux attendre votre réponse;)
xcrypt

Réponses:


13

Il y a en fait un très bel article à ce sujet sur Gamasutra. Et couvre des sujets comme les formations et la résolution des collisions:

entrez la description de l'image ici

Et un autre article d'eux sur le même sujet, qui est un peu plus court mais contient plus d'exemples de pseudo-code:

entrez la description de l'image ici

Enfin, une chose intéressante à penser lors de la mise en œuvre de votre système est l'idée d'un "champ de flux" Supreme Commander 2 utilisé cela ; Et il est basé sur la recherche Crowd Flows de la Washington State University .


Merci, j'ai vu le continuum des foules trouver des trucs du commandant suprême, mais je pense que je vais m'en tenir à ce que j'ai. J'essaierai cela quand j'aurai un peu plus d'expérience, parce que oui, ça a l'air vraiment chouette; D
xcrypt

2

Je pense que vous pouvez avoir une "entité troupeau" invisible qui est le patron de la formation, et faire en sorte que les autres créatures se positionnent par rapport à cette entité. Si cette entité peut pivoter, la position relative pivotera également.

... oopos .. vous le faites déjà.

Et ça:

Pourquoi ne pouvez-vous pas calculer de nouvelles positions pour les entités qui entrent en collision? Je n'ai pas besoin d'être sophistiqué, peut-être juste de dramer une ligne à partir du point d'origine souhaité et du leader, et de déplacer la position souhaitée au milieu de cette ligne. Testez à nouveau la collision.


Eh bien, c'est à peu près ce que j'ai dit dans ma question: D La partie délicate est de savoir comment gérer la collision de la formation avec le terrain / les obstacles / les structures
xcrypt

Désolé !, j'ai mis à jour ma réponse avec une nouvelle idée.
Tei

Je ne comprends pas, vous divisez simplement par deux l'amplitude du vecteur de décalage et continuez à vérifier s'il s'agit d'une position sans collision? Cela échouerait très probablement dans de nombreux cas
xcrypt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.