Gemessen an dem, was @davidluzgouveia zu dem Beitrag von annonymously kommentiert hat, werde ich mein Projekt ansprechen. Pfadverfolgung und Pfadfindung sind jedoch sehr unterschiedlich. Die Pfadsuche ist eher das, worüber anonym gepostet wurde, und für die Pfadsuche würde ich den Algorithmus von Dijkstra untersuchen. Für die Pfadverfolgung verwende ich ausschließlich die von mir gewählte Physik-Engine. Ich habe es so eingerichtet, dass jede Position, zu der eine Einheitenklasse geht, in ihrer Pfadunterklasse über 2D-Offsets eingerichtet wird. Ja, sie sind 2D und nicht 3D. Dies liegt an der Art und Weise, wie ich meine Physik in meinem Spiel eingerichtet habe .
3D-Erklärung:
Jede Einheit verfügt nur über einen Hauptkollider, der ausschließlich für die Kollision mit dem Gelände und den Weltobjekten eingerichtet ist. Es ist eine Kapselform und hat einen Radius und programmatisch eine Höhe. Es befindet sich in der Mitte des Modells und sollte sich über die Vorder- und Oberseite des Modells erstrecken. Ich habe aber auch einen Oberflächenversatz, der angibt, wie weit es zu jeder Zeit vom Boden entfernt ist, und einen Wert, der angibt, wie weit es nach unten rutschen darf, bevor es zu einem bestimmten Zeitpunkt leicht nach oben springt. Das hört sich so an, als würde ich eine Art Fehlerbehebung für ein Problem mit Geländekollisionen anwenden, aber ich habe meine Gründe.
Üben Sie auf jeden Fall Kraft auf dieses Kapselobjekt aus und es sollte immer über dem Boden schweben. Das heißt nicht, dass es nicht höher gehen kann, nur dass es nicht tiefer gehen kann. Der Grund, warum es (in meinem Fall) schweben muss, ist, dass in einer Starrkörper- und Ragdoll-Physik-Engine die Beine meiner Einheiten prozedural animiert sind. Wenn Sie also eine einfache Kraft auf die Kapsel ausüben, positionieren sich die Beine meines Wesens von selbst neu. Sie werden auch ihre separaten Schwerkraftanwendungen haben! Wenn sich mein Charakter auf einer Schräge befindet, kann sich ein Fuß auf einer niedrigeren Höhe als der andere befinden.
Genau so solltest du es machen. Nach dem zu urteilen, was du fragst, ist das. Wenn Sie auf einige Funktionen verzichten möchten, ist dies offensichtlich in Ordnung, insbesondere wenn es sich um eine Echtzeit- oder FPS-Funktion handelt und niemand jemals Geräte sehen wird, die sich um Füße oder Gegenstände kümmern. Im Allgemeinen sollte die Einheit jedoch ein Hauptkollisionsobjekt haben, das fast ausschließlich mit der Bewegung des Charakters arbeitet.
Speziell 2D:
Sie sollten immer noch einen Hauptpunkt oder nur eine Art Referenz haben, damit der Motor herumschiebt, das ist für die Bewegung einer Einheit. Sie können jeder Einheit eine Pfad-Unterklasse zuweisen, die einige Orte enthält, zu denen sie gehen muss. Sie können sie im Ebenencode angeben (z. B. Ort1 (x, y) Ort2 (x, y) usw.) Sie wissen nicht, an welcher Art von Spiel Sie arbeiten.) Es wäre wahrscheinlich, Orte in der Ebene anzugeben und zu veranlassen, dass jede Einheit sie in der von der Ebene festgelegten Reihenfolge verarbeitet. Wenn sie jeden Ort erreicht hat, muss sie den gewünschten Ort durch ersetzen das nächste muss es erreichen.
Es gibt unzählige Möglichkeiten, die Sie ändern können, z. B. eine Liste der Standorte für jede Einheit, da dies bedeuten würde, dass nicht alle Einheiten an denselben Standorten arbeiten müssen. Auf die gleiche Weise können Sie dies jedoch auch im Level-Code tun (unit1.location1 (x, y) unit1.location2 (x, y) grunt.l1 (x, y) knight.loc3 (x, y) was auch immer)
Nur ein paar Ideen! Ich schlage vor, Sie lesen die 3D-Version, obwohl sie weit weniger relevant ist.
BEARBEITEN: Ich habe mich entschlossen, beide nur für diejenigen bereitzustellen, die dies lesen könnten (Ja, das stimmt). (Ich habe ursprünglich nur Ihre Frage überflogen und nicht bemerkt, dass sie ziemlich 2D-spezifisch ist, bis ich sie erneut las>.>)