Auf der Suche nach einer guten Technik für die Bewegung von Charakteren im Hack & Slash-Spiel

51

Ich mache ein Hack & Slash-Spiel und möchte, dass sich meine Charaktere wie zum Beispiel in Torchlight, Diablo usw. bewegen. Zur Zeit generiere ich einen Knotensatz für alle begehbaren Bereiche eines Bodens. Wenn ich irgendwo klicke, geht der Spieler dort durch den interpolierten Pfad der Knoten. Das sieht nicht sehr natürlich aus. Spieler bewegt sich wie ein Roboter. Feinde benutzen dieses Knotensystem auch für die Bewegung und teilen das gleiche Problem, aber ich habe noch ein Problem mit ihnen. Wenn Gegner einen Spieler entdecken, gehen sie auf kürzestem Weg zu ihm. Manchmal benutzen sie den gleichen Weg und richten sich an den Spieler aus, anstatt ihn zu umgeben. Ich weiß nicht, wie ich Feinde dazu bringen kann, verschiedene Pfade zu wählen und den Spieler zu umgeben. Wissen Sie, wie ich dieses Problem lösen kann? Vielleicht sollte ich einen anderen Ansatz für die Charakterbewegung verwenden?


Meine derzeitige Technik:

Bildbeschreibung hier eingeben


Torchlight-Screenshot:Bildbeschreibung hier eingeben

---AKTUALISIEREN---

Ich möchte wissen, wie ich mit diesen Situationen umgehen soll:

Situation 1, ich habe dynamische / statische Hindernisse auf meinem Weg

Bildbeschreibung hier eingeben

Situation 2, Feinde haben den gleichen Pfad zum Spieler (stellen Sie sich in die Warteschlange, um mit uns zu kämpfen) Bildbeschreibung hier eingeben

Piotrek
quelle
10
+1 für Diagramme und Screenshots (und eine gute Frage). Immer nützlich.
Die kommunistische Ente
Dies ist eine großartige Frage (+1), für die es hoffentlich eine Menge Diskussionen und Vorschläge zu verschiedenen Möglichkeiten gibt, mit dieser Herausforderung umzugehen (zufällige Einflüsse, um Routen, KI usw. zu ändern).
Randolf Richardson
1
Ich finde es eine gute Praxis, ein Punktesystem zu verwenden, wenn Sie eine KI erstellen. Abhängig von der Punktzahl jedes Gegners (Zeit, um den Spieler zu erreichen), können Sie ihm ein bestimmtes Verhalten geben. Wenn beispielsweise maximal 8 Mobs den Spieler angreifen können, können diejenigen, die eine höhere Punktzahl als die ersten acht haben, wissentlich versuchen, einen längeren Weg zum Spieler zu finden, wodurch sie intelligenter aussehen.
Jonathan Connell
Ich suche noch nach einer Antwort. Wie kann ich mit Hindernissen (dynamisch / statisch) auf dem Navigationsnetz umgehen? , Ich kann nicht Recast verwenden
piotrek

Antworten:

24

Lenkverhalten in Kombination mit einer Navigationsdatenstruktur .

Es gibt eine Reihe von Möglichkeiten, dies zu tun, aber das ist das Grundkonzept. Es ist möglicherweise einfacher, ein Navigationsnetz zu verwenden, damit Sie die Pfadfindung in jedem konvexen Abschnitt anwenden können.

Wenn Sie ein Diagramm über die hält unnachgiebig sind, können Sie ein verwenden suchen Verhalten im Pfad zu jedem Knoten, anstatt starr nach einem Weg von Knoten zu Knoten.

Eine andere Methode, die Sie verwenden können, ist die Pfadglättung. Beachten Sie jedoch, dass dies relativ rechenintensiv ist.

Ich hoffe, das hilft.

BEARBEITEN:

Verwenden Sie zur Vermeidung von Hindernissen eine Art von Hindernisvermeidung .

Ray Dey
quelle
Danke für die Antwort, wissen Sie, wie ich ein Navigationsnetz erzeugen kann? Oder gibt es einen anderen Weg, es zu schaffen? Meine Karte besteht aus nahtlosen Teilen des Bodens (Quads / Dreiecke).
Piotrek
1
Sie können jederzeit Recast ( code.google.com/p/recastnavigation ) zum Generieren eines Navigationsnetzes verwenden. Sie müssen ihm nur eine "Dreiecksuppe" (ein Bündel von Polygonen) geben, und es wird es für Sie erzeugen.
Ray Dey
Bin ich der einzige, dem dies begegnet aber der Link: ai-blog.net/archives/000152.html ist tot. Eigentlich kann ich nicht auf www.ai-blog.net zugreifen
123iamking
3

Wenn Sie sich lieber an einen Nodegraphen halten möchten, anstatt wie von anderen vorgeschlagen zu einem Navigationsnetz zu wechseln, können Sie das Problem "Auf den Spieler zugehen, anstatt ihn zu umgeben" lösen, indem Sie jedem Feind einen Angriff aus einer bestimmten Richtung zuweisen.

Es gibt viele Möglichkeiten, um dies zu erreichen, aber ich benutze normalerweise ein 'Token'-System, um Monstern eindeutige Richtungen zuzuweisen, wobei das Spielerobjekt für jede Richtung (Norden, Nordosten, Osten usw.) einen Token besitzt. Wenn ein Feind auf den Spieler zugehen will, muss er zuerst einen Marker von ihm erwerben. Die durch den Marker angegebene Richtung sagt dem Monster, zu welcher Seite des Spielers es den Weg finden darf. Da der Spieler nur einen Spielstein für jede Richtung hat und Monster einen Spielstein benötigen, bevor sie angreifen können, werden nicht alle Monster versuchen, auf dieselbe Seite des Spielers zu gelangen, was ihre Wege etwas aufbrechen sollte.

Außerdem solltest du beim Auffinden von Pfaden möglicherweise auch eine kleine Strafe für die Knoten verhängen, um die Monster dazu zu bewegen, sich aus einer Richtung zu nähern, die ihrem Spielstein entspricht. (Das heißt, wenn ein Monster den Marker hat, der es ihm erlaubt, von Osten anzugreifen, dann behandle zum Zweck der Bestimmung des "kürzesten Pfades" für dieses Monster alle Pfadknoten, die sich nord / west / südlich des Spielers befinden, als ob es handelt sich um mehrere Knoten anstatt nur um einen. Dadurch werden die Monster schneller getrennt und versuchen, den Spieler zu flankieren, anstatt einzeln auf den Spieler zuzugreifen und sich erst im letzten Schritt auszubreiten.

Trevor Powell
quelle
2

Grundsätzlich ist es für Feinde wichtig, auf Makroebene nach Pfaden zu suchen (denken Sie daran, konvexe Bereiche zu generieren und zu dem Bereich zu navigieren, in dem sich der Spieler befindet) und auf Mikroebene Boid-Lenkverhalten zu üben (sobald Sie nah dran sind) an den Spieler).

Hier ist ein Beispiel für das Verhalten von Boids: http://www.red3d.com/cwr/boids/

Für den Spieler macht Fackelschein meiner Meinung nach die Wegfindung auf einem Navigationsnetz, auf das Sie klicken / ziehen, und das funktioniert ziemlich gut. Es fühlt sich vielleicht etwas unzusammenhängender an als die direkte Kontrolle, aber es führt zu besseren Ergebnissen für den Spieler.

Tetrade
quelle
Aber was zum Beispiel mit Treppen? Der Feind kann mich auch dort angreifen, es zu einem anderen Navigationsnetz machen?
Piotrek
Es sollte Teil des Navigationsnetzes sein und eine eigene konvexe Form haben.
Tetrad
1
Alternativ können Sie Ihr Point-to-Point-Pathing auch weiterhin verwenden und auf physikbasiertes Lenkverhalten zurückgreifen, wenn Sie "nah dran" sind.
Tetrad
Wie gehe ich mit dynamischen Hindernissen in Navigationsnetzen um?
Piotrek
1
Hier ist ein Blogbeitrag darüber, wie Recast damit umgeht : digestingduck.blogspot.com/2011/03/… .
Tetrad
1

Es gibt einen Algorithmus mit dem Namen rrt, der für Probleme bei der Pfadfindung in der realen Welt verwendet wird. Die Oberfläche, auf der Ihr Held (oder Ihre Feinde) gehen können, ist eine Eingabe zusammen mit der Fläche, auf der sich Objekte bewegen können, und mithilfe eines Optimierungsalgorithmus wird ein Pfad zu Ihrem Ziel gefunden. Soviel ich weiß, wird dieser Algorithmus in Robocup-Ligen sehr häufig verwendet. Es ist schnell, findet den kürzesten Weg und vermeidet Kollisionen und scharfe Kurven. Sie können diese Powerpoint-Show verwenden , um einen Überblick über die Pfadgenerierung zu erhalten.

Ali1S232
quelle
Nach genauerem Hinsehen scheint die Präsentation, die ich zur Verfügung gestellt habe, nur zu erklären, was rrt tut, und auch einen neuen Ansatz vorzuschlagen, von dem behauptet wird, dass er in einigen Fällen besser funktioniert.
Ali1S232
0

Um die Routenberechnung "realistischer" zu gestalten, empfehlen wir Ihnen, den Artikel über natürlich aussehendes A * in Game Programming Gems Vol.1 zu lesen

Freud
quelle