Empêcher la catastrophe de survirage dans les jeux de course

9

Lorsque je jouais à GTA III sur Android, j'ai remarqué quelque chose qui m'ennuyait dans presque tous les jeux de course auxquels j'ai joué (peut-être à l'exception de Mario Kart): la conduite en ligne droite est facile, mais les courbes sont vraiment difficiles. Lorsque je change de voie ou dépasse quelqu'un, la voiture commence à pivoter d'avant en arrière, et toute tentative de correction ne fait qu'empirer les choses. La seule chose que je puisse faire, c'est de freiner. Je pense que c'est une sorte de survirage.

Ce qui le rend si irritant, c'est que cela ne m'arrive jamais dans la vraie vie (Dieu merci :-)), donc 90% des jeux avec des véhicules à l'intérieur me semblent irréels (bien qu'ils aient probablement de très bons moteurs physiques). J'en ai parlé à quelques personnes, et il semble que soit vous «ayez» des jeux de course, soit vous n'en avez pas. Avec beaucoup de pratique, j'ai réussi à devenir semi-bon à certains jeux (par exemple de la série Need for Speed), en conduisant très prudemment, en freinant beaucoup (et en me faisant généralement une crampe dans les doigts).

Que pouvez-vous faire en tant que développeur de jeux pour éviter la catastrophe de résonance de survirage et faire en sorte que la conduite se sente bien? (Pour un jeu de course occasionnel, cela ne vise pas une physique 100% réaliste)

Je me demande également quels jeux comme Super Mario Kart font exactement différemment afin qu'ils n'aient pas autant de survirage?

Je suppose qu'un problème est que si vous jouez avec un clavier ou un écran tactile (mais pas les roues et les pédales), vous ne disposez que d'une entrée numérique: gaz pressé ou non, direction gauche / droite ou non, et il est beaucoup plus difficile de diriger de manière appropriée pour un vitesse donnée. L'autre chose est que vous n'avez probablement pas un bon sens de la vitesse et conduisez beaucoup plus vite que vous ne le feriez (en toute sécurité) en réalité. Du haut de ma tête, une solution pourrait être de faire varier la réponse de la direction avec la vitesse.

jdm
la source
3
Vous devez également considérer qui est votre public cible. Si c'est un passionné de conduite de joueurs, vous ne les aliénerez qu'en «fixant» la réalité. Vous ne faites probablement pas de course de voitures et ne comprenez pas qu'à des vitesses élevées d'une course, le problème que vous rencontrez est une chose très réelle qui est un problème pour les vrais pilotes de course. La vraie «solution» est d'être plus décontracté, et c'est ce que Mario Kart fait différemment. Ils sont plus lâches avec la physique et ne modélisent pas les forces nécessaires pour créer des queues de poisson, et ne sont donc pas d'intérêt pour les fans de jeux de conduite hardcore.
DampeS8N du
Je ne sais pas à quel point vous pouvez y accéder facilement, mais j'ai pensé que cela pourrait aider. Il y a longtemps, j'ai joué à un jeu PSX appelé Formula One. Ils en ont fait plusieurs mais c'était le tout premier. Quoi qu'il en soit, c'était une simulation, mais les options avaient des options d'assistance au pilotage et au freinage avec un curseur que vous pouviez augmenter ou diminuer. Donc, si vous avez une assistance à la rupture très élevée par exemple, votre voiture se briserait automatiquement si elle prenait un virage trop rapide, et elle se dirigerait également pour vous (en fonction de la quantité d'assistance que vous vouliez), alors vous voudrez peut-être vérifier que pour une solution.
wardd

Réponses:

7

Une solution serait de tricher un peu et de deviner ce que le joueur veut faire. Lorsque le joueur est sur une section droite et appuie à gauche, vous pouvez supposer qu'il veut changer de voie. Lorsqu'il est proche d'une courbe ou d'une intersection, il veut certainement tourner. Le joueur est incapable de contrôler son angle de braquage exact dans une courbe, vous pouvez donc décider de donner au joueur le bénéfice du doute et de le laisser toujours conduire à travers les courbes dans l'angle idéal lorsqu'il appuie sur le bouton de rotation au bon moment (aussi longtemps aussi physiquement possible - tout joueur qui essaie de conduire avec une courbe en épingle à cheveux à 200 km / h mérite d'être puni par un court vol au-dessus de l'herbe).

Bien sûr, cela pourrait devenir délicat lorsque le joueur veut réellement faire demi-tour sur une section droite ou veut changer de voie juste avant une intersection.

Une autre solution consisterait à faire la différence entre appuyer sur une touche et la maintenir enfoncée. Plus le joueur tient la clé en main, plus l'angle de rotation est élevé. Cela ne semble même pas irréaliste, car lorsque vous avez un volant, vous avez besoin de temps pour le tourner à fond.

Modifier: sur un écran tactile, vous pouvez utiliser des curseurs au lieu de boutons pour contrôler la direction et la vitesse de manière analogique. Lorsque l'écran est sensible à la pression, vous pouvez également interpréter la pression (mais donner un retour visuel sur la pression maximale, ou des joueurs trop zélés peuvent casser leur affichage). Lorsque l'appareil possède des capteurs d'orientation, vous pouvez utiliser l'inclinaison de l'appareil pour contrôler la direction.

Philipp
la source
Merci pour votre correction, @kotekzot. Mais vous pouvez suggérer des modifications directement à d'autres personnes sans avoir à leur demander.
Philipp
votre idée est bonne. Lorsque le bouton droit est enfoncé (0/1), il fera tourner la voiture avec un angle qui dépend de la courbe. Comme quand vous conduisez: vous dites «je tourne à gauche» (0/1) mais en fait vous tournerez le volant plus ou moins en fonction de la pente. Et aussi quelque chose qui mérite d'être mentionné: l'angle change progressivement , pas tout d'un coup.
GameAlchemist
0

Je suis tombé sur cette (vieille) question en recherchant quels jeux autres que Grand Theft Auto IV et V ont implémenté, mais j'ai une réponse décente pour obtenir un survirage contrôlable. Je n'ai qu'une expérience avec le modèle de conduite dans Grand Theft Auto V, mais ces informations devraient être applicables à la plupart des modèles de conduite quelque peu réalistes.

Ce qui semble se produire dans la plupart des jeux de conduite, c'est que la sortie de direction de la voiture est directement liée à l'entrée du joueur - même si une sorte de lissage (temporel) est utilisé. Cela provoque une sensation de lenteur ou une sensation saccadée - et la voiture ne se corrige pas après avoir lâché les commandes. Cela contraste avec une vraie voiture, où la voiture a tendance à se centrer après avoir relâché la force sur la roue. Certains jeux essaient de corriger cela en changeant leur modèle de manipulation ou en ayant des modèles de manipulation d'arcade.

Ce qui peut être observé dans Grand Theft Auto V, c'est que l'entrée de direction de l'utilisateur n'est pas directement liée à la sortie de direction. Le véhicule se dirige tout seul vers son vecteur vitesse actuel. Ceci est visible lors du forçage d'une légère situation de survirage et de l'observation des roues directrices - sans aucune intervention, elles effectuent un contre-virage par elles-mêmes. Toute entrée utilisateur est ensuite ajoutée en plus de ces corrections "naturelles".

Un inconvénient de cette approche, cependant, est que la voiture se sent trop collante et quelque peu têtue pour entrer dans un glissement de puissance ou une dérive - donc cette valeur de contre-braquage peut être limitée à un certain angle.

Cette théorie peut être vérifiée en réimplémentant le système de direction et en le comparant avec le comportement d'origine.

  • En reliant directement l'entrée à la sortie, le véhicule est en effet extrêmement difficile à contrôler, même après avoir appliqué le limiteur d'entrée de direction basé sur la vitesse.
  • Lors de l'ajout du contre-virage naturel, le comportement est presque identique à l'implémentation des jeux, mais les voitures sont "trop" stables.
  • Lors de l'ajout d'une limite de 15 degrés au contre-virage, le comportement est presque identique.

Une chose à garder à l'esprit est que Grand Theft Auto V a été considéré comme "idéal" ici - bien que je n'aie pas encore trouvé d'autre jeu qui implémente ce système.

Si vous êtes curieux de découvrir du code, voici un extrait de mon implémentation.

// 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
la source