Comment amener les agents AI à se déplacer le long d'une courbe?


12

Actuellement, mon cadre d'IA très basique a des agents qui se déplacent le long d'un chemin irrégulier composé d'une série de points.

chemin de navigation

Ils le font en déplaçant simplement leur position d'un point à l'autre. Quand ils atteignent le point suivant, ils se déplacent vers le suivant et ainsi de suite. Comment puis-je changer cela pour qu'ils se déplacent en douceur le long d'une version courbe du chemin, et comment générer la courbe?


comment choisissent-ils le point suivant?
FxIII

@FxIII désolé de ne pas avoir vu ce commentaire auparavant - voulez-vous dire comment ont-ils choisi une nouvelle cible de recherche ou comment ont-ils choisi le prochain point de la recherche?
SirYakalot

Réponses:


4

Vous recherchez une sorte de lissage de chemin. Bien sûr, comme l'a souligné bummzack, vous voulez également vous assurer que tout lissage de chemin que vous effectuez entraîne des mouvements légaux pour vos agents.

Cet article de Gamasutra explique à peu près tout ce que vous devez savoir, y compris le lissage de trajectoire, les virages légaux et les algorithmes de virage réalistes et lisses.

Une autre alternative, qui est légèrement plus simple, consiste à utiliser un comportement de recherche avec un petit cercle / sphère de délimitation pour vérifier si l'agent se trouve au point suivant du chemin ou près de celui-ci.


7

Puisque vous connaissez déjà vos points de contrôle, il vous suffit de mettre à jour votre code d'interpolation pour utiliser un algorithme de courbure (Hermite ou Cosine, par exemple).

Ces sites offrent une excellente explication et un exemple de code qui devraient vous aider à démarrer:

Méthodes d'interpolation de Paul Bourke

Sol :: Tutoriels - Astuces d'interpolation


Et si la courbe générée heurte soudainement un obstacle?
bummzack

C'est juste pour le mouvement des agents, par image. Le même algo de détection de collision s'appliquerait toujours. Lorsqu'une collision est détectée, changez les points de contrôle pour éviter l'objet (difficile), ou commencez temporairement à utiliser un autre mouvement.
Doug.McFarlane

@bummzack, c'est un bon point, et la réponse est d'utiliser un maillage de navigation et de lisser vos courbes en conséquence, mais pour l'instant je vais simplement faire fonctionner cela avec un simple graphique de navigation et donc je vais résoudre ce problème en lissant uniquement les chemins un peu.
SirYakalot

@bummzack: ajoutez des comportements de direction pour éviter les obstacles au-dessus de l'algorithme de génération de trajectoire courbe.
imre

0

Je vais aller à contre-courant ici et suggérer qu'au lieu de pré-générer vos courbes, il suffit de les gérer image par image, en utilisant (par exemple) la même logique que vous utiliseriez pour créer un homing -missile .

Ce sera beaucoup plus facile et probablement plus réaliste car vous n'avez pas besoin de cas particuliers lorsqu'il y a des murs entre deux points - vous gérez simplement la détection de collision comme d'habitude.

L'inconvénient est que le mouvement sera sous-optimal. L'objet empruntera toujours le chemin le plus direct d'un point de cheminement au suivant, ce qui signifie que, contrairement à une spline, il ne commencera à se tourner vers le point de cheminement 3 qu'après avoir déjà passé le point de cheminement 2. Selon votre situation, cela peut ou non être réparable en ajustant vos waypoints (si c'est même un problème).


1
Ce serait essentiellement un comportement de recherche que j'ai suggéré.
Ray Dey

0

L'outil de recherche de chemin doit vous donner le chemin et vous ne devez pas le modifier. Je crois qu'il est possible de modifier votre algorithme de recherche de chemin pour tenir compte du fait que le chemin avec des virages serrés est torturé que ceux avec des courbes lisses comme il le fait déjà avec un chemin long vs des chemins courts.

Je posterai ici une solution si je peux trouver un moment pour y réfléchir profondément, mais je pense que c'est la voie à suivre.

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.