Ich versuche eine Lösung für dieses Problem zu finden. Ich versuche, ein Navigationsnetz im Format eines Gitters von Eckpunkten zu erstellen, die an x, y-Bodenkoordinaten in Form von Quadraten für den 3D-Raum gebunden sind. Aber ich habe Probleme, einen Weg zu finden, um das zu erreichen.
Ich habe versucht, in die Recast-Bibliothek zu schauen. Es ist eine ziemlich robuste Methode, aber sie verlangsamt sich anscheinend mit größeren Karten und offenem Raum. Ich weiß auch nicht, wie sie mit der Höhenkarte Eckpunkte und Kanten für den Weltraum erzeugen.
Mein nächster Gedanke war, das zu tun, was Unreal Engine 3 früher getan hat.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Welches Raycasts verwenden sollte, um das Netz zu erzeugen. Ich konnte nicht herausfinden, wie ich die Raycasts stoppen sollte.
Also ... meine nächste Option war Box, möglicherweise eine Box-Besetzung. Erstellen Sie ein unterteiltes Volumen mit einer Größe von 2. Richten Sie die Box am Raster aus und schießen Sie rechteckige Prismen als Strahl nach unten. Wenn es auf einem Stück Geometrie landet, das Teil des Bodens ist und das Rechteck nicht geschnitten wird, lassen Sie dort ein Quadrat. Und weiter nach unten, bis die Grenzen des Volumens erreicht sind. Um zu überprüfen, ob Kanten verknüpft werden müssen, könnte ich prüfen, ob die Steigung zwischen zwei Scheitelpunktpaaren innerhalb der begehbaren Steigung liegt, und sie zusammenführen, wenn dies zutrifft.
Meine Hauptprobleme sind ... das scheint nicht sehr optimal zu sein. Ohne darüber nachzudenken, ist der Prozess bei der Schätzung O (N ^ 3) für eine mehrschichtige Ebene. Was ziemlich böse werden kann.
Und das letzte Bit dient zum automatischen Erstellen rechteckiger Gruppen dieser Quadrate. Ich bin mir nicht ganz sicher, wie ich das machen soll. Die unwirkliche Implementierung trennt sie durch Steigungen. Ich versuche jedoch, das Rasterformat beizubehalten. Das ist also nicht unbedingt notwendig. Das Problem besteht weiterhin darin, große rechteckige Kacheln zu erstellen, um den Pfadfindungsprozess in eine Kachelbasis aufzuteilen. Die Fliesen dürfen weder zu groß noch zu klein sein.
Die Fragen sind also ...
Was wäre ein effizienter Weg, um dieses umgürtete Navmesh zu erzeugen? Und was wäre ein guter Weg, um die Fliesen zu erstellen?
Antworten:
Eine grundlegende 3D-Welt könnte durch ein Navigationsnetz dargestellt werden, das in den meisten Spiel-Engines bequem aufgebaut werden kann. Der Akteur kann sich entlang der Kanten von Polygonen bewegen.
Das wäre eine einfache Lösung. Es gibt viele Algorithmen zum Finden und Generieren eines Navigationsnetzes.
Ich möchte etwas mitteilen, das ich vor einiger Zeit gelesen habe.
Dies beschreibt eine mögliche Lösung, bei der wir unsere Spielwelt in quadratische Kacheln aufteilen können. Immer wenn ein quadratisches Plättchen zum Spiel hinzugefügt wird (wenn sich der Spieler einem Gebiet / prozeduralem Gelände nähert), wird ein quadratisches Plättchen hinzugefügt. Wir müssen jedoch nicht mehr das gesamte Navmesh berechnen. Wir berechnen es einfach für diese Kachel und fügen es dem vorhandenen Diagramm hinzu. Signifikanter Leistungsgewinn dort.
Das nächste Problem ist die gezackte Bewegung aus dem vorherigen Beispiel. Ich kann verstehen, dass durch die Betrachtung zukünftiger Kurven und die Verallgemeinerung der Richtung die Zick-Zack-Bewegung stark reduziert und die Bewegung flüssig gemacht wird. Spiele mit detaillierten Animationen geben es nicht preis, aber Sie können dies in einigen Open-World-Spielen feststellen, bei denen ich davon ausgehen würde, dass die Navigation meistens gebacken ist.
Was die Frage betrifft , würde ich Ihnen empfehlen, die Antwort von Kromster zu lesen von Kromster auf einer Liste von Algorithmen zur Erzeugung von Navmesh zu lesen.
Schauen Sie sich auch die KI-Systeme von Left 4 Dead an, zu denen die Beispiele gehören. Viele weitere interessante Themen behandelt
Viel Glück.
quelle
Es gibt viele Möglichkeiten, warum man es nicht einfach lokal für den Spieler macht, ein kleines Gitter erstellt, das dem Spieler folgt und unter jeder Kreuzung prüft, ob es übertragbar ist oder nicht, wie es dort einen Boden gibt und einen Strahlwurf macht, um zu sehen, ob es einen gibt eine Mauer / ein Gebäude auf jeder kommenden Seite ..
quelle
Das ist ein Problem, das ich überall gesehen habe. Der Trick ist "Trennung von Bedenken". "Sag was?", Hörte ich dich denken. Was auf dem Bildschirm angezeigt wird, ist NICHT die "Datenstruktur". Es ist wichtig, die visuellen Elemente von den Daten zu trennen, um die visuellen Elemente zu erstellen. Dies wird Ihr Spiel immer "zukunftssicher" machen, wenn neue zugrunde liegende Softwareversionen veröffentlicht werden.
Erstellen Sie eine Datenstruktur (auch bekannt als: Modell), die Ihre Spielewelt repräsentiert. Erstellen Sie dann eine "Ansicht" des Datenstrukturmodells. Wenn Sie die Welt von einem Schachbrettgitter in ein sechseckiges Gitter ändern möchten, bleibt die Datenstruktur (Modell) dieselbe, aber die Anzeige "malt" (rendert) eine andere Ansicht.
quelle
Machen Sie ein doppeltes Array. Und wenn ein Objekt / Objekte unpassierbar sind, haben Sie eine Methode, um dem Array mitzuteilen, dass die Position nicht passierbar ist. Wenn eine KI versucht, sich zu bewegen, überprüft sie das doppelte Array und prüft, ob es passierbar ist.
quelle