Derzeit entwickle ich ein Diablo-ähnliches Spiel für die mobile Plattform (iphone5 +).
Eine einfache A * -Suche findet den Pfad, aber die Vermeidung von Kollisionen muss noch berücksichtigt werden.
Es werden ungefähr 50 Monster gleichzeitig aktiv sein, daher ist die Leistung sehr wichtig.
Ich habe einige Methoden gefunden, die funktionieren könnten.
NavMesh + RVO
Die Neufassung / Umleitungsbibliothek funktioniert gut
pathfinding
, aber die Crowd-Simulation erreicht schnell das Limit (mehr als 5 ms für 30 Agenten).Eine andere Bibliothek RVO2 scheint in Ordnung zu sein (weniger als 2 ms für 50 Agenten), aber die Bibliothek hat einige Lizenzprobleme.
Strömungsfelder + Physik-Engine
Viele RTS-Spiele verwenden diese Methode, aber es scheint, dass eine Physik-Engine erforderlich ist, um Kollisionen aufzulösen. Wenn viele Agenten kein gemeinsames Ziel haben, kostet diese Methode möglicherweise mehr als die herkömmliche A * -Pfadfindung.
Lenkverhalten + Physik-Engine
Das Lenkverhalten enthält viele Konzepte, von denen ich denke, dass
simple avoidance behavior
sie funktionieren könnten (biegen Sie einfach nach links / rechts ab, wenn sich etwas vor Ihnen befindet), aber die Methode erfordert immer noch eine Physik-Engine, um zusammenzuarbeiten.
Ich bin mir immer noch nicht sicher, welche ich verwenden soll. Vielleicht gibt es andere Methoden zur Pfadfindung und Kollisionsvermeidung.
PS Halo:Spartan Strike
verwendet Havok AI (basierend auf RVO?), Aber ich habe in diesem Spiel nicht viele Feinde gesehen, daher frage ich mich, ob die erste Methode (NavMesh + RVO) auf mobilen Plattformen gut funktioniert.
Antworten:
Dies ist eine ziemlich interessante Frage, und ich werde versuchen, mit dem beizutragen, was ich kann.
Zunächst denke ich, dass Sie die Grenzen für das Spiel, das Sie erstellen möchten, klar definieren und diese Fragen definieren müssen (einige wurden möglicherweise bereits beantwortet).
Zu zitieren eine Antwort von hier ab , wie Wegfindung in starcraft erfolgt 2:
Kehren Sie also zu Ihren drei Aussagen zurück:
In einigen Hinweisen zum Lenkverhalten können Sie mit den gewünschten Bereichen so viele Lenkkräfte definieren, wie Sie benötigen. Sie benötigen mindestens 3 für Beflockung / Anziehung / Abstoßung, aber mehr sind wahrscheinlich interessant.
Versuchen Sie dann, eine Bibliothek zu finden, die Lenkverhalten ausführt, um festzustellen, ob es Ihren Anforderungen entspricht ( so ? Ich kenne keine wirklich, aber es existiert).
Wenn die Bibliothek nicht Ihren Anforderungen entspricht, können Sie Spaß haben! Es gibt jedoch genügend Ressourcen und Algorithmen, um das Beflockungsverhalten selbst zu implementieren. Beispiel 1 Beispiel 2
Wenn Sie sich für die Implementierung entscheiden, sollten Sie wissen, dass einige nette Optimierungen erforderlich sind, da der Umfang Ihres Agenten beispielsweise durch seine Position in der Herde verringert wird. Es sollte sowieso in einigen Algorithmen enthalten sein.
Nun, das ist das Beste meines Wissens, ich bin mir sowieso nicht sicher
quelle
Wenn die feindlichen Pfade nicht sehr dynamisch sind (Dynamisch wäre, dass jedes Paar Agenten verschiedene Ziele angreift und die Pfade zu diesen Zielen alle paar Frames aktualisiert werden müssen).
Dann würde ich eine Kombination aus Strömungsfeldern und Lenkverhalten durchführen, wenn die Leistung Ihr Hauptanliegen ist. Es gibt einige kompliziertere Themen wie die Aufteilung des Speicherplatzes Ihrer Agenten, sodass es einfacher ist, Nachbarn zu finden, aber es ist die beste Wahl für die Leistung. (Entfernen Sie Ihre A * -Suche und verwenden Sie Flussfelder, um Ihre Agenten zu leiten.)
Diese beiden Algorithmen zusammen werden im Allgemeinen als die am besten optimierte Lösung für Szenen mit hoher Agentendichte und wenig dynamischem Pfad angesehen.
Ich würde Physik vermeiden, egal welche Option Sie haben, da sie schwer werden kann.
Kollisionen zwischen Agenten können fast ausschließlich durch Lenkverhalten behandelt werden, und Flussfelder reduzieren das Gewicht von 50 Agenten, die Pfade berechnen. Beachten Sie jedoch, dass Flussfelder immer teurer werden, je größer Ihre Kartengröße und je kleiner Ihre Rastergröße ist und je dynamischer Ihre Zielauswahl sein muss.
quelle