Skip to content

Dynamic Pathfinding

tarTG edited this page Apr 29, 2020 · 2 revisions

Um das Sandbox-Projekt in Zukunft möglichst leicht und vielseitig erweitern zu können wurde im Projekt dynamische Wegfindung auf dem Terrain ermöglicht. Das Projekt stellt einen NavMesh auf dem Terrain zur Verfügung. Somit können sämtliche native Unity AI Komponenten (wie z.B. NavMeshAgents) problemlos genutzt werden.

Anpassungen des Bereichs für den ein NavMesh generiert wird

In der Unity Scene befindet sich ein Game Object mit dem Namen "DynamicNavMeshBuilder". Über die Eigenschaften dieses Objekts ("Position" in Transform und "Size" im Local NavMesh Builder Script) kann das Volumen angepasst werden, in welchem der NavMesh generiert werden soll.
image
Das eingestellte Volumen wird als grüne Outline angezeigt. Das tatsächliche Volumen, für welchen der NavMesh generiert wird snapt in bestimmten Abständen an ein Gitter und wird als gelbe Outline angezeigt.

Anpassen, welche Objekte bei der Generierung des NavMeshes einbezogen werden sollen

Soll ein Objekt in der NavMesh generierung mit einbezogen werden (aktuell nur das Terrain), so muss das "Nav Mesh Source Tag" Script angehängt werden. Dieses Script befindet sich im Ordner "Scripts".
image

NavMesh Einstellen

Um die Agent Types anders einzustellen oder den NavMesh sichtbar zu machen wird das "Navigation" Tab benötigt. Dieses kann unter Window > AI > Navigation aktiviert werden.
image
Hier können nun die Parameter der Agents angepasst werden.

NavMesh anzeigen lassen

Für Debugging kann es hilfreich sein den generierten NavMesh anzeigen zu lassen. Dafür muss das Projekt im Editor gestartet werden (Play Button), da der NavMesh nur zur Runtime existiert. Im "Scene" View kann man jetzt bei aktiviertem "Navigation" Tab den NavMesh einblenden. Wird der NavMesh von Agents verwendet kann man hier die Wegfindung des Agents live Nachverfolgen.
image

Hinweise zu Performance

Bei bestimmten Einstellungen eines AgentTypes kann es zu einer deutlicheren verschlechterung der Performance kommen. In der Regel ist dies der Fall sobald für den NavMesh viele Tris generiert werden. Das kann entweder bei sehr kleinen NavMeshAgents der Fall sein oder bei gering eingestellter max slope. image
Wie man in diesem Beispiel sieht ist der NavMesh voller Lücken und besteht aus vielen nicht verbundenen Teilen. Dies führt zu schlechter Performance und verhindert gute Wegfindung.
image
Hier sieht man ein Beispiel für besser geeignete Einstellungen. Der NavMesh ist geschlossener und besteht aus relativ großen Flächen.

Clone this wiki locally