KI zum Bewegen von benutzerdefinierten Raumschiffen (Form, die das Bewegungsverhalten beeinflusst)


15

Ich entwerfe ein vernetztes, rundenbasiertes 3D-6DOF-Strategiespiel für die Raumflotte, das sich stark auf die Anpassung von Schiffen stützt. Lassen Sie mich das Spiel ein wenig erklären, da Sie ein wenig darüber wissen müssen, um die Frage zu stellen.

Was ich anstrebe, ist die Fähigkeit , Ihre eigene Flotte von Schiffen mit benutzerdefinierten Formen und angebrachten Modulen (Propeller, Traktorstrahlen ...) zu erstellen , die jedem Schiff Vor- und Nachteile bieten, sodass Sie viele verschiedene Flottenverteilungen haben. Zum Beispiel würde ein langes Schiff mit zwei Propellern an der Seite das Schiff leicht um dieses Flugzeug drehen lassen, größere Schiffe würden sich langsam bewegen, wenn Sie nicht viele Propeller hinten platzieren bewege dich nur schnell in diese Richtung.) Ich plane, das ganze Spiel um dieses Feature herum auszugleichen.

Das Spiel würde sich um zwei Phasen drehen: Befehle und Kampfphase. Während der Bestellphase kommandieren Sie die verschiedenen Schiffe. Wenn alle Spieler die Befehlsphase beendet haben, beginnt die Kampfphase und die Schiffsbefehle werden für einige Zeit in Echtzeit ausgeführt. Dann wird die Aktion unterbrochen und es gibt eine neue Befehlsphase.

Das Problem entsteht, wenn ich an die Eingabe eines Players denke. Um ein Schiff zu bewegen, müssen Sie verschiedene Propeller ein- oder ausschalten, wenn Sie steuern, vorwärts fahren, bremsen, drehen möchten ... Diese Propeller müssen nicht mit ihrer ganzen Kraft arbeiten, damit Sie mehr Bewegung erzielen können kombinationen mit weniger propellern.

Ich finde diesen Ansatz etwas langweilig. Der Spieler will nicht mit Motoren oder irgendetwas herumspielen, sondern nur BEWEGEN und TÖTEN. Ich beabsichtige, dass der Spieler diesen Schiffen Befehle erteilt, indem er ein Ziel und eine Drehung festlegt. Dann berechnet die KI die richtige Propellerkraft, um diese Bewegung und Drehung zu erreichen. Der Vortrieb muss nicht während der gesamten Abbiegeberechnung gleich sein (nachdem die Befehle erteilt wurden), daher wäre es cool, wenn die Schiffe während der Bewegung reagieren und die Leistung der Propeller dynamisch an ihre Bedürfnisse anpassen würden. Dies kann jedoch der Fall sein zu schwer zu implementieren und es wird nicht wirklich benötigt, damit das Spiel funktioniert.

Wie würde diese KI in beiden Fällen entscheiden, welche Propeller aktiviert werden sollen, damit die beste (oder zumindest nicht die schlechteste) Flugbahn erreicht wird?

Ich dachte über einige Ansätze nach:

  • KI lernen: Die Schiffstypen lernten durch Versuch und Irrtum etwas über ihre Bewegungen, passten ihr Verhalten mit mehr Verwendungszwecken an und wurden schließlich "schlau". Ich möchte mich nicht so sehr auf AI-Codierung einlassen, und ich denke, es kann für den Spieler frustrierend sein (auch wenn Sie es lernen lassen können, ohne zu spielen).
  • Vorberechnete Zeitschrittbewegung: Bei der Schiffserstellung werden ALLE möglichen Bewegungen für jede Propellerkonfiguration und Leistung für eine bestimmte Deltazeit berechnet. Speicherintensiv, hässlich, schlecht.
  • Vorausberechnete Flugbahnen: Wie oben, jedoch nicht für jede Deltazeit, sondern für die gesamte Flugbahn, die dann so weit wie möglich angepasst wird. Erfordert eine feste Propellerkonfiguration für die gesamte Kampfphase und ist trotzdem speicherintensiv, hässlich und schlecht.
  • Kontinuierliches Brute Forcing: Die KI überprüft kontinuierlich ALLE möglichen Propellerkonfigurationen während der gesamten Kampfphase, berechnet ein paar Zeitschritte vor und entscheidet darauf basierend, welche die beste ist. Con: Was jetzt gut ist, ist später vielleicht nicht mehr so ​​gut, und es ist zu CPU-intensiv, hässlich und auch schlecht.
  • Single Brute Forcing: Wie oben, jedoch nur Brute Forcing zu Beginn der Simulation. Daher ist während der gesamten Kampfphase eine konstante Propellerkonfiguration erforderlich.
  • Kontinuierliche Winkelprüfung: Dies ist keine vollständige Bewegungsmethode, sondern eine Möglichkeit, "dumme" Propellerkonfigurationen zu verwerfen. Anhand des Normalenvektors und des Endvektors des aktuellen Propellers können Sie die für den Propeller erforderliche Leistung anhand des Winkels schätzen. Sie müssen dies kontinuierlich während der gesamten Kampfphase tun. Ich habe das kürzlich herausgefunden, also habe ich nicht zu viel darüber nachgedacht. Von vornherein hat es den Nachteil, dass das, was jetzt gut ist, später möglicherweise nicht so gut ist, und es kümmert sich nicht um die anderen Propeller, die zusammenwirken, um eine bessere Antriebskonfiguration zu erzielen.

Ich stecke hier wirklich fest. Irgendwelche Ideen?


Haben Sie sich mit Lenkverhalten befasst?
Stonemetal

1
@stonemetal sicher. Das Problem hierbei ist, dass das Lenkverhalten normalerweise unter der Annahme einer vollständigen Kontrolle über die Position und Drehung des Objekts und einiger Einschränkungen modelliert wird (oder zumindest das, was ich im Web gefunden habe.) Die KI hat hier keine vollständige Kontrolle über das Objekt , aber nur über Dinge (Propeller), die das Wesen bewegen. Ich habe Probleme, dieses Lenkverhalten mit der tatsächlichen Fortbewegung des Raumschiffs zu verbinden.
16.

Das ist auch der Grund, warum Lenkverhalten bei Rennwagen nicht so gut funktioniert. Das Lenkverhalten ist großartig, aber es ist nicht die universelle Lösung für alles.
Am

@ haoD Ich habe mir etwas in der Art überlegt, wie Ghostonline es beantwortet hat. Lassen Sie sie bauen, was auch immer, dann übersetzen Sie es in Einschränkungen für ein Lenkverhalten. Aus Ihrer Antwort geht jedoch hervor, dass das Lenkverhalten wahrscheinlich nicht flexibel genug ist.
Stonemetal

1
Ich weiß, das ist super alt, aber was Sie suchen, heißt kinodynamische Bewegungsplanung
mklingen

Antworten:


4

Leider haben wir keine erprobte Lösung, aber kann dies nicht mathematisch gelöst werden?

Wenn ein Propeller und sein Versatz vom Massenmittelpunkt gegeben ist, können Sie berechnen, in welcher Ebene Sie sich drehen können.

Für jede Bewegung können Sie einen oder mehrere Propeller verwenden. Jeder Propeller kann abgefragt werden, ob sein Flugzeug zur Zielorientierung beitragen kann, wie viel Aufwand der Propeller für die Einbringung benötigt (Propeller, die weit vom CoM entfernt sind, können weniger Energie verbrauchen, um mehr Drehung zu erzeugen) und wie nah dies kommen würde Sie zum Ziel oritentation. Dann überqueren Sie diesen Suchraum mit einem A *, bis Sie eine kostengünstige Lösung finden, bei der es sich um die geringste Gesamtenergie oder um die schnellste Bewegung handeln kann.

Überdenken Sie dies immer wieder, wenn Sie die Kurve abschließen, und mäßigen Sie die Leistung, wenn Sie sich dem Ziel nähern, möglicherweise mit einem PID-Regler.

Bei Vorwärtsbewegung würde eine einfache Lösung Sie immer vorwärts treiben und Ihre Zielgeschwindigkeit verringern, wenn Sie sich dem Ziel nähern. Da Sie 3D-Raum zum Spielen haben, können Sie komplizierte 3-Punkt-Turn-Routinen vermeiden. Sie müssten die Leistung der Propeller, die für die geradlinige Geschwindigkeit ausgewählt wurden, als eine Art Ausgangszustand in Ihre Kurvenberechnung einbeziehen.

Das ist sehr einfach, aber ich sehe keine größeren Mängel. Nur viel harte Arbeit und das Ändern von Zahlen. :)


Das ist, wonach ich gesucht habe, eine mathematische Lösung ... danke! Ich hoffe es wird so einfach wie es sich anhört.
KaoD

7

Da Sie ein bisschen Spielerkontrolle für die Spielbarkeit mit einer KI aufgeben möchten, sollten Sie auch in Betracht ziehen, die Auswirkung des Heftens auf Propeller zu vereinfachen und die Schiffsdimensionen in weniger, leichter handhabbare Parameter für einen Computeralgorithmus zu ändern. Es ist dem Spieler weiterhin gestattet, Propeller an einem bestimmten Teil des Schiffes hinzuzufügen, doch sobald dies abgeschlossen ist, wird es in Parameter 'komprimiert'.

Jeder Propeller beeinflusst die Wendegeschwindigkeit des Schiffes oder in Kombination mit einem parallel angeordneten Propeller die Reisegeschwindigkeit in einer bestimmten Dimension. Kombinieren Sie diese Parameter für jeden Propeller und Sie erhalten die maximale Wendegeschwindigkeit und Geschwindigkeit für ein Schiff. Kombinieren Sie diese beiden Parameter für jeden Propeller und jeden Propeller, und geben Sie für alle verfügbaren Dimensionen (nach oben, unten, links, rechts, vorwärts, rückwärts) die maximale Umdrehungs- und Geschwindigkeitsrate für das Schiff als Ganzes an.

Wenn Sie die Wendegeschwindigkeit und Geschwindigkeit für jede Dimension verwenden, verfügen Sie über genügend Informationen, damit sich das Schiff tatsächlich zu einem Ziel bewegt. Der Spieler wird den Effekt seiner Propellerkonfiguration sehen, aber unter der Haube wird seine Eingabe erheblich vereinfacht. Sie könnten sich mehr als eine Flugstrategie ausdenken, die auf der Entfernung basiert, die das Schiff zurücklegen muss, um den Flug natürlicher erscheinen zu lassen und das Gefühl des Spielers zu stärken, die Schiffsbewegung unter Kontrolle zu haben. Aber am Ende ist es, wie Sie sagten, egal, wie das Schiff zum Ziel kommt und ob seine Route optimal ist, es muss nur dort sein und seine Ankunftszeit wird von der Propellerkonfiguration beeinflusst.

Sie können die Schiffsdimensionen berücksichtigen, sobald Sie die komprimierten Geschwindigkeitswerte für einen groben Effekt haben, oder sie beim Berechnen für einen genaueren Effekt verwenden. Sie möchten wahrscheinlich testen, ob sich die genaue Methode lohnt, da der Unterschied möglicherweise nicht das Kontrollgefühl des Spielers beeinträchtigt.


Nicht genau das, wonach ich gesucht habe, aber ich könnte es schaffen, wenn ich es wirklich brauche. Befürworten Sie die Idee :)
kaoD

0

Im Raum beeinflusst die Form die Bewegung nicht. Keine Luft zum Schleppen.

Auf das Schiff und die Gesamtmasse der Add-Ons kommt es an. Es ist ein einfacheres Problem der Massenschub-Schwerkraft. Sie können diese Berechnungen durchführen oder, da es sich um ein Turn-Basisspiel handelt, ein Bewegungssystem entwickeln, wie es RPGs wie Traveler haben.


Willkommen bei GD.SE! Diese Frage hat bereits eine akzeptierte Antwort und wurde vor 2 Jahren gestellt. Vielleicht können Sie einige der neueren Fragen auf der Website beantworten.
Polar

Ja, alles wahr, aber ich gehe immer davon aus, dass andere später darauf stoßen (wie ich) und es von Nutzen finden. hehe, ich bin nicht hierher gekommen, um Fragen zu beantworten ... wie die meisten, um nach Lösungen für meine eigenen Probleme zu suchen.
Gnoll110

@Polar Frage Poster hier. Ich fand seine Antwort sehr interessant! Ich bin froh, dass er zurückgekommen ist, um zu antworten, und ich denke, dass die Wertschöpfung Jahre später einer der wertvollsten Teile von SO ist.
kaoD

@ gnoll110 Ich könnte mich hier irren. Es gibt keinen Widerstand, okay, aber der Winkel, den der Schubvektor mit dem Massenmittelpunkt bildet, beeinflusst, wie sich das Schiff verschiebt oder dreht ... richtig? Beispiel: Ein Motor, der sich in der Mitte des Massenschwerpunkts befindet, verschiebt sich, während er vom Massenschwerpunkt abweicht, und fügt dem Schiff eine rotierende Komponente hinzu.
kaoD

@kaoD Tut mir leid, wenn es ein bisschen hart erschienen ist - offensichtlich bringt viel SO später einen Mehrwert. Ich schlug nur vor, dass er auch neuere Fragen beantworten könnte - je mehr Fragen beantwortet wurden, desto besser!
Polar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.