-
Notifications
You must be signed in to change notification settings - Fork 3
Dynamic Pathfinding
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.
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.

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.
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".

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.

Hier können nun die Parameter der Agents angepasst werden.
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.

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.

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.

Hier sieht man ein Beispiel für besser geeignete Einstellungen. Der NavMesh ist geschlossener und besteht aus relativ großen Flächen.