Wie gehe ich in einer großen vernetzten Welt mit dem Finden und Bewegen von Entitäten um?

12

Bildbeschreibung hier eingebenIn Anbetracht des obigen Bildes mit Kacheln, die in 32x32-Felder aufgeteilt sind, habe ich eine Entität, die markiert ist, um Spieler in der Nähe, die ihr nahe kommen, zu "aggro". Ich möchte, dass dieses Monster den Spieler idealerweise jagt (und den Spieler noch eine Weile jagt). Gegenwärtig ist meine einzige Bewegung ein einfacher Interpolator für entfernte Entitäten, und dies funktioniert, weil die Lücken zwischen Bewegungsaktualisierungen ziemlich klein sind.

Ich kann dem Klienten nicht einfach sagen, dass das Monster an die Position gehen möchte, an der es sich befindet, da dies dazu führt, dass sich die Entität viel schneller bewegt, als es sollte (dies kann wahrscheinlich mit etwas Mathematik für die Interpolations-Co gelöst werden -effektiv) aber was noch wichtiger ist, es sieht nicht realistisch aus und kann Wände abschneiden! Ich möchte nicht die gesamte Bewegung auf dem Server simulieren, wenn dies vermieden werden kann ... obwohl ich vermute, dass ich könnte, aber das würde das Clipping-Problem immer noch nicht lösen. Ich vermute, die Lösung beinhaltet einige Pfadfindung und das Senden von regelmäßigen Client-Knotenaktualisierungen und das Simulieren der Bewegung durch sie, aber ich bin mir nicht sicher.

Vielen Dank!

Vaughan Hilts
quelle

Antworten:

9

Für einen einfachen Start können Sie Lenkverhalten implementieren . Suchen Sie gezielt nach Verhaltensweisen . Bildbeschreibung hier eingeben

Neben der Suche sollten die Charaktere Vermeiden verwenden, um von Hindernissen wegzulenken .

Bildbeschreibung hier eingeben

Sobald diese Aspekte funktionieren, können Sie intelligentere Folgemaßnahmen implementieren. Das würde die Wegfindung einschließen. Anstatt auf ihre Feinde zu steuern , steuern die Feinde nun auf jeden Knoten auf dem Weg, der sie zu ihrem Ziel führt.

Sobald der Feind "nah genug" ist, können Sie ganz auf Lenkverhalten umschalten. Da sie kostengünstiger sind als die Suche nach Pfaden und Sie auf kurze Distanz gute Ergebnisse erzielen.

Mit der Lenkung können Sie auch maximale Drehgeschwindigkeiten und Höchstgeschwindigkeiten für Feinde definieren.

Die Steuerung kann auf dem Client mit regelmäßigen Aktualisierungen vom Server verwaltet werden, um sicherzustellen, dass sie weiterhin auf dem richtigen Weg sind.

MichaelHouse
quelle
Würde dies bedeuten, dass auch das Steuerungsverhalten auf dem Server simuliert wird, oder kann ich die Entität logisch entlang des Pfads "fangen"? Ich brauche keine große Präzision.
Vaughan Hilts
Die Lenkung alleine müsste simuliert werden (ist aber nicht sehr schwer). Die Steuerung zu Wegpunkten könnte jedoch ohne Simulation aktualisiert werden. Vergewissern Sie sich einfach, dass sich der Client in Reichweite des "aktuellen" Wegpunkts befindet und steuern Sie den richtigen Wegpunkt als "nächsten" an. Dies würde einige Schnappschüsse erfordern, wenn die Entität nicht in der Spur wäre und plötzlich aktualisiert würde.
MichaelHouse
+1 für großartige Antwort. Danke, dass du meine Stunden gespart hast.
Md Mahbubur Rahman
1

Ich kann dem Kunden nicht einfach mit Erfolg sagen, dass das Monster zu der Position wechseln möchte, an der es sich befindet, da dies dazu führt, dass sich die Entität viel schneller bewegt, als es sollte (dies kann wahrscheinlich mit etwas Mathematik für die Interpolations-Co gelöst werden effizient)

Eigentlich ist das ganz einfach. Die Bewegungsrichtung ist die Zielposition minus der aktuellen Position. Alles, was Sie tun müssen, ist, diesen Vektor auf die tatsächlich gewünschte Bewegungsgeschwindigkeit zu skalieren. Wiederholen Sie jeden Frame.

aber was noch wichtiger ist, es sieht nicht realistisch aus und kann Wände abschneiden! Ich möchte nicht die gesamte Bewegung auf dem Server simulieren, wenn dies vermieden werden kann ...

Sie müssen die Bewegung auf dem Server simulieren. Woher wissen Sie sonst, dass alle Spieler dasselbe Verhalten beobachten?

Sie benötigen eine grundlegende Pfadfindung. A * ist der Standard. Sie können einen Pfad zum Ziel berechnen und dann diesem Pfad folgen, indem Sie wie oben beschrieben Bewegungsvektoren festlegen. (Oder Sie können das Steuerverhalten wie in der Antwort von Byte56 verwenden, was mit einigen zusätzlichen Extras im Wesentlichen identisch ist.)

Kylotan
quelle