Verhindern Sie eine Übersteuerungskatastrophe in Rennspielen

9

Beim Spielen von GTA III auf Android habe ich etwas bemerkt, das mich in fast jedem Rennspiel, das ich gespielt habe, gestört hat (vielleicht außer Mario Kart): Geradeaus zu fahren ist einfach, aber Kurven sind sehr schwer. Wenn ich die Spur wechsle oder an jemandem vorbeifahre, schwenkt das Auto hin und her, und jeder Versuch, dies zu korrigieren, macht es nur noch schlimmer. Ich kann nur auf die Bremse treten. Ich denke, das ist eine Art Übersteuern.

Was es so irritierend macht, ist, dass es mir im wirklichen Leben nie passiert (Gott sei Dank :-)), so dass 90% der Spiele mit Fahrzeugen im Inneren für mich unwirklich sind (obwohl ich wahrscheinlich wirklich gute Physik-Engines habe). Ich habe mit ein paar Leuten darüber gesprochen, und es scheint, dass Sie entweder Rennspiele "bekommen" oder nicht. Mit viel Übung habe ich es geschafft, bei einigen Spielen (z. B. aus der Need for Speed-Serie) halbwegs gut zu werden, indem ich sehr vorsichtig gefahren bin, viel gebremst habe (und normalerweise einen Krampf in meinen Fingern hatte).

Was können Sie als Spieleentwickler tun, um die übersteuernde Resonanzkatastrophe zu verhindern und das Fahrgefühl zu verbessern? (Für ein Gelegenheitsrennspiel strebt das nicht nach 100% realistischer Physik)

Ich frage mich auch, was Spiele wie Super Mario Kart genau anders machen, damit sie nicht so viel übersteuern?

Ich denke, ein Problem ist, dass Sie, wenn Sie mit einer Tastatur oder einem Touchscreen (aber nicht mit Rädern und Pedalen) spielen, nur einen digitalen Eingang haben: Gas gedrückt oder nicht, links / rechts lenken oder nicht, und es ist viel schwieriger, für a angemessen zu lenken gegebene Geschwindigkeit. Die andere Sache ist, dass Sie wahrscheinlich kein gutes Gefühl für Geschwindigkeit haben und viel schneller fahren, als Sie es in der Realität (sicher) tun würden. Eine Lösung könnte darin bestehen, das Lenkverhalten mit der Geschwindigkeit zu variieren.

jdm
quelle
3
Sie müssen auch überlegen, wer Ihre Zielgruppe ist. Wenn es ein begeisterter Fahrer ist, werden Sie sie nur entfremden, indem Sie die Realität „reparieren“. Sie fahren wahrscheinlich keine Rennwagen und verstehen nicht, dass bei den hohen Geschwindigkeiten eines Rennens das Problem, das Sie haben, eine sehr reale Sache ist, die für echte Rennfahrer ein Problem darstellt. Die eigentliche "Lösung" besteht darin, lockerer zu sein, und genau das macht Mario Kart anders. Sie sind mit der Physik lockerer und modellieren nicht die Kräfte, die zur Erzeugung von Fischschwänzen benötigt werden, und sind daher für Hardcore-Fahrspielfans nicht von Interesse.
DampeS8N
Ich weiß nicht, wie einfach Sie darauf zugreifen können, dachte aber, es könnte helfen. Ich habe vor langer Zeit ein PSX-Spiel namens Formel 1 gespielt. Sie haben mehrere davon gemacht, aber es war das allererste. Wie auch immer, es war eine Simulation, aber die Optionen hatten Lenk- und Bremsassistenzoptionen mit einem Schieberegler, den Sie erhöhen oder verringern konnten. Wenn Sie zum Beispiel einen sehr hohen Bremsassistenten hätten, würde Ihr Auto automatisch brechen, wenn es zu schnell in eine Kurve fährt, und es würde auch für Sie lenken (abhängig davon, wie viel Assistenz Sie wollten), sodass Sie dies möglicherweise überprüfen möchten das für eine Lösung.
Wardd

Antworten:

7

Eine Lösung wäre, ein bisschen zu schummeln und zu raten, was der Spieler tun möchte. Wenn sich der Spieler auf einem geraden Abschnitt befindet und nach links drückt, können Sie davon ausgehen, dass er die Spur wechseln möchte. Wenn er sich einer Kurve oder Kreuzung nähert, möchte er auf jeden Fall abbiegen. Der Spieler ist nicht in der Lage, den genauen Lenkwinkel in einer Kurve zu steuern. Sie können dem Spieler also den Vorteil von Zweifeln geben und ihn immer im idealen Winkel durch Kurven fahren lassen, wenn er den Drehknopf im richtigen Moment (so lange) drückt so physisch wie möglich - jeder Spieler, der versucht, mit 200 km / h durch eine Haarnadelkurve zu fahren, verdient es, mit einem kurzen Flug über das Gras bestraft zu werden.

Dies kann natürlich schwierig werden, wenn der Spieler tatsächlich auf einem geraden Abschnitt umkehren oder kurz vor einer Kreuzung die Spur wechseln möchte.

Eine andere Lösung wäre, einen Unterschied zwischen dem Tippen auf eine Taste und dem Halten einer Taste zu haben. Je länger der Spieler den Drehschlüssel hält, desto höher ist der Drehwinkel. Das fühlt sich nicht einmal unrealistisch an, denn wenn Sie ein Lenkrad haben, brauchen Sie Zeit, um es vollständig zu drehen.

Bearbeiten: Auf einem Touchscreen können Sie Schieberegler anstelle von Tasten verwenden, um Lenkung und Geschwindigkeit auf analoge Weise zu steuern. Wenn der Bildschirm druckempfindlich ist, können Sie den Druck auch interpretieren (aber visuelles Feedback zum maximalen Druck geben, oder übereifrige Spieler können ihre Anzeigen beschädigen). Wenn das Gerät über Orientierungssensoren verfügt, können Sie die Lenkung mithilfe der Gerätekippung steuern.

Philipp
quelle
Vielen Dank für Ihre Korrektur, @kotekzot. Sie können jedoch Änderungen an anderen Personen direkt vorschlagen, ohne sie fragen zu müssen.
Philipp
Ihre Idee ist gut. Wenn die rechte Taste gedrückt wird (0/1), dreht sich das Auto in einem Winkel, der von der Kurve abhängt. Richtig wie beim Fahren: Sie sagen "Ich biege links ab" (0/1), aber tatsächlich drehen Sie das Lenkrad je nach Neigung mehr oder weniger. Und noch etwas Erwähnenswertes: Der Winkel ändert sich allmählich , nicht plötzlich.
GameAlchemist
0

Ich bin auf diese (alte) Frage gestoßen, als ich untersucht habe, welche anderen Spiele als Grand Theft Auto IV und V implementiert haben, aber ich habe eine anständige Antwort, um ein kontrollierbares Übersteuern zu erreichen. Ich habe nur einige Erfahrungen mit dem Fahrmodell in Grand Theft Auto V, aber diese Informationen sollten für die meisten etwas realistischen Fahrmodelle gelten.

Was in den meisten Fahrspielen zu passieren scheint, ist, dass die Ausgabe der Fahrzeuglenkung direkt mit der Eingabe des Spielers verknüpft ist - selbst wenn eine Art (zeitliche) Glättung verwendet wird. Dies führt zu einem trägen oder ruckartigen Gefühl - und das Auto korrigiert sich nicht, nachdem es die Bedienelemente losgelassen hat. Dies steht im Gegensatz zu einem echten Auto, bei dem das Auto dazu neigt, sich nach dem Loslassen der Kraft auf das Rad zu zentrieren. Einige Spiele versuchen dies zu korrigieren, indem sie ihr Handhabungsmodell ändern oder über Arcade-Handhabungsmodelle verfügen.

Was in Grand Theft Auto V beobachtet werden kann, ist, dass die Benutzereingabe nicht direkt mit der Lenkausgabe verknüpft ist. Das Fahrzeug lenkt von selbst in Richtung seines aktuellen Geschwindigkeitsvektors. Dies ist sichtbar, wenn eine leichte Übersteuersituation erzwungen und die gelenkten Räder beobachtet werden - ohne Eingabe steuern sie selbst gegen. Jede Benutzereingabe wird dann zusätzlich zu diesen "natürlichen" Korrekturen hinzugefügt.

Ein Nachteil dieses Ansatzes ist jedoch, dass sich das Auto zu klebrig und etwas hartnäckig anfühlt, um in einen Powerslide oder Drift zu geraten. Daher kann dieser Gegenlenkwert auf einen bestimmten Winkel begrenzt werden.

Diese Theorie kann überprüft werden, indem das Lenksystem erneut implementiert und mit dem ursprünglichen Verhalten verglichen wird.

  • Wenn die Eingabe direkt mit der Ausgabe verknüpft wird, ist das Fahrzeug in der Tat äußerst schwer zu steuern, selbst wenn der geschwindigkeitsbasierte Lenkeingabebegrenzer angewendet wurde.
  • Beim Hinzufügen des natürlichen Gegensteuers ist das Verhalten nahezu identisch mit der Implementierung der Spiele, aber Autos sind "zu" stabil.
  • Beim Hinzufügen einer 15-Grad-Grenze zum Gegensteuern ist das Verhalten nahezu identisch.

Zu beachten ist, dass Grand Theft Auto V hier als "ideal" eingestuft wurde - obwohl ich noch kein anderes Spiel gefunden habe, das dieses System implementiert.

Wenn Sie neugierig auf Code sind, finden Sie hier einen Ausschnitt meiner Implementierung.

// Returns in radians
float Racer_calculateDesiredHeading(float steeringMax, float desiredHeading,
    float reduction) {
    desiredHeading *= reduction;
    float correction = desiredHeading;

    // Get the relative velocity vector
    Vector3 speedVector = ENTITY::GET_ENTITY_SPEED_VECTOR(vehicle, true);
    if (abs(speedVector.y) > 3.0f) {
        // Simplify it to an angle
        Vector3 target = Normalize(speedVector);
        float travelDir = atan2(target.y, target.x) - static_cast<float>(M_PI) / 2.0f;
        if (travelDir > static_cast<float>(M_PI) / 2.0f) {
            travelDir -= static_cast<float>(M_PI);
        }
        if (travelDir < -static_cast<float>(M_PI) / 2.0f) {
            travelDir += static_cast<float>(M_PI);
        }
        // Correct for reverse
        travelDir *= sgn(speedVector.y);

        // Limit to some degree, R* uses 15 degrees
        travelDir = std::clamp(travelDir, deg2rad(-15.0f), deg2rad(15.0f));

        // User input deviation
        correction = travelDir + desiredHeading;
    }

    return std::clamp(correction, -steeringMax, steeringMax);
}
ikt
quelle