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:
Torchlight-Screenshot:
---AKTUALISIEREN---
Ich möchte wissen, wie ich mit diesen Situationen umgehen soll:
Situation 1, ich habe dynamische / statische Hindernisse auf meinem Weg
Situation 2, Feinde haben den gleichen Pfad zum Spieler (stellen Sie sich in die Warteschlange, um mit uns zu kämpfen)
Antworten:
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 .
quelle
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.
quelle
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.
quelle
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.
quelle
Um die Routenberechnung "realistischer" zu gestalten, empfehlen wir Ihnen, den Artikel über natürlich aussehendes A * in Game Programming Gems Vol.1 zu lesen
quelle