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.
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?
mathematics
algorithm
path-finding
SirYakalot
la source
la source
Réponses:
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.
la source
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
la source
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).
la source
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.
la source