Pilote AI dans un jeu de course


17

Je suis curieux de savoir comment contrôler les voitures dans un jeu de course.

Mon agent IA doit-il contrôler sa voiture avec des commandes telles que "accélérateur sur 0,35, volant sur 0,5 à droite, frein sur 0,0"? Ou devrais-je plutôt pré-calculer une courbe à laquelle la voiture adhère, et les visuels comme les roues avant qui tournent sont juste pour que tout semble cohérent? Ou existe-t-il un autre moyen?


4
La stratégie "coller à la courbe idéale" ne fonctionne que tant qu'il n'y a pas d'interférence. Au moment où les agents de l'IA commenceront à interagir avec d'autres voitures (en les esquivant ou en se faisant percuter), ils devront improviser.
Philipp

1
Oui, quelque chose comme des nœuds le long de la piste avec une direction de type boids.
MichaelHouse

1
Voici un article sur l'IA dans le Rallye 2 de Colin McRae
gre_gor

@gre_gor, cet article est très utile, merci!
dargemir

Réponses:


16

Nous pouvons dire qu'à un certain niveau, le jeu suit un chemin pré-calculé. Étant donné que les pistes du jeu de course sont (généralement) un chemin pré-calculé de toute façon.

Même si nous parlons de générer des pistes au hasard, le jeu doit avoir calculé la portion actuelle des pistes pour le moment où la voiture y arrive.

Eh bien, c'était facile. Autre chose à ce sujet?

Les deux, suivre un chemin pré-calculé et contrôler la voiture ont systématiquement des utilisations dans l'industrie du jeu. La réponse est d'utiliser les deux, en quelque sorte.

Tout d'abord, je tiens à mentionner que «calculer une courbe» peut signifier deux choses:

  • Création de fonctions qui afficheront la position sur la courbe, avec comme paramètre la distance que vous souhaitez interroger.

  • Création d'un chemin, compris comme une liste de points (ou instructions et autres informations de contrôle) à suivre.

Le premier peut être utile pour la prédiction ou dans certaines simulations physiques. Pourtant, lorsque nous parlons de contrôler un objet, ce dernier est l'approche recommandée.

Remarque: pour les jeux plus anciens (années 80), les autres voitures ressemblent davantage à des obstacles mobiles. Ils étaient là pour que vous les évitiez et les dépassiez. Nous n'en parlons pas.


  • Suivre un chemin pré-calculé: Ceci est utile pour les cinématiques ou les scènes répétables. Par exemple, dans GTA San Andreas, les missions de poursuite de la cible de poursuite et toutes les voitures suivent un chemin prédéfini (cela garantit que la cible de poursuite peut éviter le trafic ※). Pourtant, dès que vous les perturbez, ils retombent sous le contrôle de l'IA, dans ce cas, l'IA devra trouver un chemin pour arriver là où elle devrait suivre son chemin normal.

    ※: En fait, il a été préenregistré. L'enregistrement et la lecture étaient l'une des nouvelles fonctionnalités du moteur de jeu GTA SA.

  • Contrôlé par l'IA:

    L'IA dans sa forme la plus simple est une machine à états. Il vérifie son état et exécute une action en fonction de cela. Je ferai référence à ces combinaisons d'état et d'action en tant que comportements. Les actions ne doivent pas nécessairement correspondre à la manette de jeu du joueur. Les comportements non plus.

    Pour un jeu simple, vous n'avez probablement besoin que de deux comportements notables: 1) s'il est sur les pistes puis suivez la piste en évitant les autres voitures et les obstacles et 2) s'il n'est pas sur les pistes, revenez sur les pistes.

    A ce stade, il n'est pas loin de suivre un chemin (les pistes). Pourtant, comme les pistes ne sont pas vraiment une ligne, il ne s'agit pas de suivre un chemin, mais de rester près de celui-ci (en évitant les autres voitures et les obstacles). Cela signifie que l'IA doit résoudre "la direction, le freinage et l'accélération".

    Pour un jeu moderne, la voiture sera également soumise à une simulation physique (pour résoudre les collisions et garder le réalisme). Pour cette raison, à chaque itération de la boucle de jeu, la voiture sera mise à jour en fonction de sa vitesse et de son accélération, et également «direction, freinage et accélération» (réglages de la vitesse) seront appliqués pour suivre le comportement actuel.

    Je veux également mentionner que les jeux modernes peuvent avoir des comportements plus complexes, par exemple, l'IA peut choisir de frapper une autre voiture ou de se bloquer. En fait, l'IA peut même choisir lequel appliquer en fonction d'une certaine forme d'apprentissage automatique, mais je m'éloigne du sujet.

    Enfin, considérez qu'il peut également être utile d'avoir un contrôle plus simple pour les voitures IA en dehors de la vue du joueur. Soit pour la performance, soit pour le Rubber Banding (qui dans ce cas maintient les voitures IA proches du joueur pour garder la course intéressante, elle peut être considérée comme la tricherie AI lorsque vous ne pouvez vraiment laisser derrière vous aucun adversaire).


Concernant l'animation, ce n'est généralement pas une bonne idée de simuler la physique des roues indépendamment. Si vous le faites, cela pourrait ajouter du réalisme au jeu, mais coûtera les performances. Habituellement, le jeu animera les roues en fonction du comportement au lieu d'exprimer le comportement en termes de mouvement des roues et de simuler les conséquences.

Bien sûr, vous devrez peut-être accorder une attention supplémentaire à ce que les roues soient ou non en contact avec le sol. Et peut-être animer la suspension.


C'est juste une merveilleuse réponse, merci beaucoup.
dargemir

0

Je recommande fortement de séparer le modèle physique / état de la voiture du contrôleur de voiture, et de faire de l'agent AI et du contrôleur du joueur deux types de contrôleurs interchangeables, avec des commandes de haut niveau comme celles que vous avez suggérées dans votre question.

Cela a un certain nombre d'effets intéressants:

  • Vous pouvez implémenter et déboguer le modèle physique / état une fois pour le joueur et l'IA
  • Toutes les nouvelles fonctionnalités du modèle physique / état s'appliquent immédiatement au joueur et à l'IA
  • Les voitures des joueurs et de l'IA se comportent de manière cohérente sur la piste, ce qui augmente l'équité perçue et réelle (si vous voulez handicaper les coureurs, bien sûr, vous pouvez le faire en modifiant les paramètres sur les voitures)
  • Différents types de prise en charge multijoueur deviennent beaucoup plus faciles à développer.

C'est un cas particulier de séparation MVC , soit dit en passant.


2
J'aime cette réponse, mais cette déclaration finale est tout simplement absurde. Retirez-le et vous avez un point de moi. Séparation des préoccupations ? - Certainement. Mais MVC ne s'applique pas dans le contexte de votre réponse complète.
Ingénieur

1
Outre le fait que l'aspect Affichage n'est pas abordé dans la question ou la réponse, pourquoi pensez-vous qu'il est absurde de définir cela comme MVC?
Russell Borogove
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.