Wie implementiere ich Gruppenbildungen in einem 3D-RTS?

14

Ich habe es geschafft, die Wegfindungsarbeit für eine einzelne Einheit zu erledigen, und ich habe es geschafft, die Kollision von Agenten und Agenten zu vermeiden, aber jetzt muss ich in der Lage sein, eine Gruppe von Agenten an einen bestimmten Ort zu senden.

Das ist mein Setup bisher:

  • Wegpunkt-Wegfindung
  • Der Mindestabstand zwischen zwei Knoten ist etwas größer als der größte für einen Agenten zulässige Kugelradius.
  • Agenten vermeiden Kollisionen mit anderen Agenten, indem sie ein Lenkverhalten ausführen, das auf einem eindeutigen Pfad basiert

Also muss ich jetzt meine Agenten irgendwohin in die Gruppe schicken. Ich habe einige Posts gelesen, die besagen, dass ein Weg dies zu tun darin besteht, einen Gruppenleiter zu erstellen und den anderen Einheiten einen Versatz für seine Position zu geben.

Aber dann ist das Problem, was ist, wenn die Gruppenbildung nicht erreicht werden kann? Sie möchten z. B. ein Rechteck bilden, aber an der Zielposition befindet sich eine Struktur in der Nähe, die Sie daran hindert, ein Rechteck-Setup zu erstellen.

xcrypt
quelle
2
Ich bin auf der Arbeit, also habe ich keine Zeit, eine richtige Antwort zu schreiben, aber hier sind meine zwei Cent Nullpunkte: Verwende einen Boids-Flock-Algorithmus und stelle dann Hindernisse als Objekte dar, von denen die Boids abgestoßen werden.
Nagler
@Nailer Der Flock-Algorithmus funktioniert, solange sie sich bewegen. Wie kann ich dann feststellen, ob ihre Endposition "in Ordnung" ist, und sie benachrichtigen, dass sie aufhören können, sich zu bewegen? Keine Sorge, ich kann auf deine Antwort warten;)
xcrypt

Antworten:

13

Bei Gamasutra gibt es tatsächlich einen ziemlich netten Artikel darüber. Und behandelt Themen wie Formationen und das Auflösen von Kollisionen:

Bildbeschreibung hier eingeben

Und ein weiterer Artikel von ihnen zum selben Thema, der etwas kürzer ist, aber mehr Pseudocodebeispiele enthält:

Bildbeschreibung hier eingeben

Schließlich ist die Idee eines "Flow Field" Supreme Commander 2, der dies verwendet , ein guter Gedanke bei der Implementierung Ihres Systems . Und es basiert auf der Crowd Flows- Forschung der Washington State University .

MichaelHouse
quelle
Danke, ich habe gesehen, wie die Menge des Kontinuums nach dem Wegweiser des Oberbefehlshabers sucht, aber ich denke, ich bleibe bei dem, was ich an Geldautomaten habe. Ich werde es versuchen, wenn ich ein bisschen mehr
Exp bekomme
2

Ich denke, du kannst eine unsichtbare "Herdeneinheit" haben, die der Boss der Formation ist, und die anderen Kreaturen dazu bringen, sich relativ zu dieser Einheit zu positionieren. Wenn sich dieses Objekt drehen kann, dreht sich auch die relative Position.

... oopos .. das machst du schon.

Was ist damit:

Warum können Sie keine neuen Positionen für die kollidierenden Entitäten berechnen? Ich muss nicht schick sein, vielleicht einfach eine Linie vom gewünschten ursprünglichen Punkt und der Führungslinie ziehen und die gewünschte Position in die Mitte dieser Linie verschieben. Erneut auf Kollision prüfen.

Tei
quelle
Nun, genau das habe ich in meiner Frage gesagt: D Der schwierige Teil ist, wie man mit der Kollision der Formation mit dem Gelände / Hindernissen / Strukturen
umgeht
Sorry !, ich habe meine Antwort mit einer neuen Idee aktualisiert.
Tei
Ich verstehe nicht, Sie würden einfach die Größe des Versatzvektors halbieren und weiter prüfen, ob dies eine kollisionsfreie Position ist? Das würde höchstwahrscheinlich in vielen Fällen scheitern
xcrypt