Ich habe ein Top-Down-2D-Spiel, bei dem die KI an den Rändern der Karte erscheint und zur Mitte rennt.
Ich verwende A * und ein Knotennetz, um den Pfad zu finden.
Im Moment spawnt die KI an einem Punkt am Rand der Karte und alle nehmen denselben Weg, der der kürzeste Weg zum Zentrum ist.
Jetzt möchte ich, dass sie überraschender und interessanter sind und unterschiedliche Wege zueinander gehen.
Ich kann mir sofort zwei Ideen dafür ausdenken, wollte aber wissen, ob es andere oder bessere Möglichkeiten gibt, die die Leute oft nutzen?
Wenn ein Feind auftaucht und einen Pfad zur Mitte erzeugt, erhöhen Sie vorübergehend die Kosten aller Knoten auf diesem Pfad und verringern Sie sie im Laufe der Zeit langsam wieder. Dann wird die feindliche KI, die später auftaucht, gezwungen, einen breiteren Weg einzuschlagen.
Der obige Ansatz wird dazu führen, dass AI nur einen immer breiteren Weg einschlägt und dennoch sehr vorhersehbar ist. Daher dachte ich, ich würde auch eine Reihe von Zwischenzielknoten auf der Karte einführen. Wenn die KI erscheint, wählen sie zufällig eines der Zwischenziele aus und gehen zuerst dorthin, bevor sie in die Mitte der Karte gehen. Wenn Sie dies mit dem oben genannten Ansatz kombinieren, die Kosten zu erhöhen, könnte dies ziemlich gut aussehen.
Welche Ansätze haben die Menschen gefunden, um die KI am besten dazu zu bringen, ihre Wege zu variieren, überzeugend und überraschend auszusehen?
quelle
Versuchen Sie zunächst, bei der Pfadfindung einen kleinen Zufallswert zum Gewicht jedes Knotens hinzuzufügen . Auf diese Weise sucht jeder Agent in einer etwas anderen Umgebung nach einem Pfad. Ich bin nicht sicher, ob dies in Ihrem Fall funktionieren wird, aber es sollte wirklich einfach sein, es zu versuchen.
quelle
Angesichts der in den Kommentaren beschriebenen Einschränkung mag ich die Antwort von Nevermind jedoch:
(distanceToGoal) + Max(0, desiredDistance - distanceTravelled))
.Dies würde die Einheiten dazu bringen, weiter zu gehen, was wahrscheinlich ein anderer Weg ist, was dazu führen würde, dass sie möglicherweise andere Wege einschlagen.
Sie könnten es auch einfach zu Ihrem Starthuerestic für jede Einheit hinzufügen, aber der zufällige Bereich müsste wahrscheinlich ziemlich viel größer sein.
quelle
Nick Wiggill wies darauf hin, dass es am einfachsten wäre, einen Kreis um das Ziel zu bilden.
Der wichtige Teil ist, alle Pfade im Kreis für den ursprünglichen Wegpunkt zu entfernen, da Sie wahrscheinlich mit Gegnern enden würden, die den Kreis überqueren, um zu ihrem ursprünglichen Wegpunkt zu gelangen.
Daraus können Sie eine beliebige Variante erhalten, indem Sie mit mehreren Werten spielen, indem Sie sekundäre Wegpunkte in den Kreis in der Nähe des ursprünglichen usw. einfügen.
quelle
Ihr Problem hierbei ist im Wesentlichen, dass A * ein Algorithmus zum Ermitteln der schnellsten Route zu einem Ziel ist. Wenn dies Ihr Hauptkriterium für einen guten Weg ist, ist es nicht verwunderlich, dass alle Ihre Akteure die gleichen Entscheidungen treffen.
Sie müssen lediglich Ihre Qualitätskriterien für den Pfad ändern, damit nicht nur der Faktor "Am kürzesten ist am besten" berücksichtigt wird. Das Element der Zufälligkeit spielt dabei eine Schlüsselrolle, jedoch nicht so sehr, dass es die Pfadfindungsintelligenz beeinträchtigt (dh die Akteure gehen auf dummen Umwegen zum Ziel).
Eine * -Pfadfindung ist von Natur aus naiv, da sie normalerweise voraussetzt, dass der Schauspieler die gesamte Route genau kennt, bevor er losfährt. Das wird immer unrealistisch aussehen. Die Lösung schlug vor, dass ausgewählte Zwischenziele einen Schritt davon entfernt sind - die KI versucht, näher an das Ziel heranzukommen, versucht jedoch nur in kleinen Abschnitten gleichzeitig zu navigieren (dies entspricht dem realen Leben, in dem Sie nur so weit navigieren können) Sie sehen, und wenn Sie den Pfad weiter durchqueren, können Sie weiter nach vorne sehen.
Ich würde vielleicht eine einfachere Sichtweise empfehlen. Behalten Sie beim Auffinden von Pfaden nicht nur den besten Pfad bei, den ich bisher gefunden habe. Sammeln Sie stattdessen einen Satz der besten 5 oder 10 Pfade. Verwenden Sie einen Schwellenwert, um offensichtliche Ausreißer zu verwerfen. Wenn beispielsweise der beste Pfad 20u durchquert, um zum Ziel zu gelangen, durchquert der nächstbeste 21u und der nächste danach 50u. Stellen Sie einen um 20% größeren Schwellenwert als den besten Pfad ein und verwerfen Sie den 50u-Pfad, da er dummerweise länger ist. Jetzt können Sie aus mehreren Pfaden auswählen. Durch die zufällige Auswahl dieser Pfade treffen Ihre Akteure unterschiedliche Entscheidungen.
Allerdings erhalten Sie diese Art von Informationen bei der Standard-A * -Suche nicht. Ich denke, Sie müssen den Algorithmus ändern oder etwas anderes verwenden, um die möglichen Pfade zu ermitteln.
quelle
Wenn Sie eine kleine Anzahl wiederkehrender Feinde (oder Feindtypen) haben, können Sie versuchen, ihnen Persönlichkeiten zu geben, die ihre Bewegungen beeinflussen. Sie müssen keine großen Dinge sein, nur Dinge, die hin und wieder auftauchen. Ein gutes Beispiel dafür sind die Geister von Pac-Man. Lassen Sie Ihr A * in mehrere Zwischenziele aufteilen. Vielleicht ist ein Feind wirklich dumm und geht leicht verloren, wenn er jeden dritten Knoten (außer direkt rückwärts) in eine zufällige Richtung steuert. Seien Sie kreativ.
quelle