Ich arbeite an einem 2D-RTS-ähnlichen Spiel. Basic A * funktioniert perfekt, um eine Einheit von Punkt A nach Punkt B zu bewegen.
Aber jetzt stelle ich mich dem Problem der kontinuierlichen Wegfindung: Wenn A ein sich bewegendes Objekt B angreift, rufe ich bei jedem Frame A * auf, sobald sich die Position von Objekt B geändert hat.
Was ist die Standardmethode für dieses Problem?
path-finding
fairstar
quelle
quelle
Antworten:
Soweit ich weiß, können Sie sich den D * -Algorithmus ansehen, der für "Dynamic A *" steht. Dieser Algorithmus wird verwendet, um die Pfadfindung für eine dynamische Umgebung, hier mit einem sich bewegenden Ziel, zu berechnen.
Hier ist ein Artikel, in dem D * zum Auffinden von Bewegungspfaden verwendet wird: Moving Target D * Lite
quelle
Eine Möglichkeit besteht darin, nur alle paar Frames einen neuen Pfad zu erstellen. Wenn Sie es ein- oder zweimal pro Sekunde anstatt mehr als 60 Mal pro Sekunde gemacht haben, ist es unwahrscheinlich, dass der Benutzer es bemerkt, es sei denn, es handelt sich bei beiden um zwei sehr schnell bewegte Objekte
quelle
Sie können den "Hundekurven" -Ansatz verwenden, den Hunde offenbar bei der Jagd auf jemanden anwenden. Sie berechnen, wo der Aufprallpunkt "in der Zukunft" sein wird und richten sich direkt auf diese Position.
Eine einfache Annäherung könnte in etwa so aussehen:
A = NPC
B = Ziel
T = Zeit, um zu B: s Position zu gelangen (B: s Anfangsposition)
Berechnen Sie, wo B in der 'T'-Zeit sein wird (wenn B mit derselben Geschwindigkeit / demselben Winkel weiterfährt) und fahren Sie stattdessen dorthin.
Dies ist nicht der perfekte Weg, da sich die Entfernung ändert, sondern viel einfacher, als eine perfekte Lösung zu finden und viel besser, als nur zu versuchen, nach "B" zu gelangen.
quelle
Einverstanden mit Kylotan, dass es keine Standardmethode gibt .
Eine Methode, die ich gesehen habe, bestand darin, anzunehmen, dass sich das Ziel weiterhin in dieselbe Richtung bewegt und die Zielposition ändert, während Sie den Algorithmus für die Wegfindung durchlaufen. Dies bedeutet, dass Sie zwei Metriken in Ihren A * -Knoten speichern müssen (Kosten und Zeit im Gegensatz zu nur Kosten).
Es ist sehr schwierig, es besser zu machen. Wenn Sie nicht wirklich über den unerschütterlichen Pfad des Ziels Bescheid wissen, begeben Sie sich in das Land der ziemlich harten KI, da Sie die KI zum zweiten Mal erraten oder das Verhalten des Ziels simulieren müssen, um zu erraten, wo sie sich befinden und wie sie darauf zugehen. Diese Art von KI ist ein Echtzeit-AB-Spiel aus der Spieltheorie, ein Bereich, der in keinem 3D-KI-Toolkit zum Standard gehört .
quelle
Eine Möglichkeit zur dynamischen Pfadfindung besteht darin, die Entität vorhersagen zu lassen, wohin das Ziel geht, und dorthin zu gehen.
Eine Möglichkeit hierfür ist die Verwendung einer Taylor-Serie.
Ich bezeichne den Weg des Ziels über die Zeit als die Funktion S (t), wobei S die Position und t die aktuelle Zeit ist und die Annäherung an den Weg A (f) und f das Datum in der Zukunft ist .
Dann ist die einfachste und dümmste Näherung A (f) = 0.
Das nächst einfachere ist A (f) = S (t), wobei t die aktuelle Zeit und f die Zukunft ist. Dies bedeutet, dass das Ziel einfach an seinem Platz anhält.
Das dritte einfachste ist A (f) = S '(t) · f + S (t), wobei S' die zeitliche Ableitung von S ist. Dies sagt voraus, dass das Ziel mit konstanter Geschwindigkeit ohne Beschleunigung weiterfährt.
Das vierteinfachste ist A (f) = S '' (t) * f ^ 2/2 + S '(t) * f + S (t). Dies sagt voraus, dass das Ziel mit einer konstanten Geschwindigkeit wie ein fallender Ball beschleunigt.
Ich weiß, dass dies in Bezug auf Zeitänderungen umformuliert werden kann, was für ein Spiel wahrscheinlich praktischer ist. Jetzt kann S alles sein. Es könnte eine X-Koordinate sein, es könnte eine Y-Koordinate sein, es könnte der Abstand zwischen den Objekten sein, es könnte ein Winkel sein. Es gibt wahrscheinlich auch bessere Methoden, um den zukünftigen Pfad eines Objekts vorherzusagen, also würde ich mich ein bisschen umsehen.
quelle
Wenn das Gelände einigermaßen offen ist und das Ziel nicht zu weit vom Verfolger entfernt ist, können Sie das Abfangsteuerverhalten verwenden. Im Wesentlichen nehmen Sie die Position und Geschwindigkeit des Ziels, um eine Position vor dem Ziel zu berechnen, die nicht zu weit und nicht zu nah ist, und Sie lenken den Verfolger in Richtung dieses Punkts (jeweils in regelmäßigen Abständen berechnet).
quelle