À en juger par ce que @davidluzgouveia a commenté sur le post de manière anonyme, je présenterai mon projet. Le suivi de chemin et la recherche de chemin sont cependant très différents. La recherche de chemin est plus de ce que publiait publiquement, et pour la recherche de chemin, j'examinerais l'algorithme de Dijkstra. Pour suivre le chemin, j'utilise entièrement mon moteur physique de choix. La façon dont je l'ai configuré est que chaque emplacement vers lequel une classe d'unité marche, est configuré dans sa sous-classe de cheminement via des décalages 2D, oui, ils sont 2D et non 3D, c'est à cause de la façon dont ma physique est configurée dans mon jeu .
Explication 3D:
Chaque unité n'a qu'un seul collisionneur principal qui est exclusivement configuré pour une collision avec le terrain et les objets du monde. C'est une forme de capsule et a un rayon et une hauteur par programme. Il est construit au centre du modèle et devrait s'étendre juste après l'avant et le haut du modèle. Mais j'ai également un décalage de surface pour savoir à quelle distance il est au-dessus du sol à tout moment, et un flotteur de combien il est autorisé à glisser vers le bas avant de rebondir légèrement, à la fois. Cela semble que j'applique une sorte de correctif vissé pour un problème de collision avec le terrain, mais j'ai mes raisons.
Quoi qu'il en soit, vous devez appliquer une force à cet objet capsule, et il doit rester en permanence au-dessus du sol. Cela ne veut pas dire que ça ne peut pas aller plus haut, juste que ça ne peut pas aller plus bas. La raison pour laquelle il doit planer (dans mon cas) est parce que dans un moteur physique de corps rigide et de ragdoll, les jambes de mes unités sont animées de manière procédurale. Ainsi, en appliquant une force simple à la capsule, les jambes de mon entité se repositionneront d'elles-mêmes. Ils auront également leurs applications de gravité séparées! Ce que cela permet, c'est que si mon personnage est incliné, un pied peut être à une altitude inférieure à l'autre.
C'est exactement ainsi que vous devez procéder. À en juger par ce que vous demandez, c'est. Si vous voulez laisser de côté certaines fonctionnalités, c'est bien sûr, surtout si c'est un RTS ou un FPS et que personne ne verra jamais les pieds ou ne s'en souciera de toute façon. Mais en général, l'unité devrait avoir un objet de collision PRINCIPAL qui fonctionne avec le mouvement du personnage presque exclusivement.
Spécifiquement 2D:
Vous devez toujours avoir un point principal, ou juste une sorte de référence, pour que le moteur se déplace, c'est pour le mouvement d'une unité. Vous pouvez donner à chaque unité une sous-classe de chemin qui a quelques emplacements dont elle a besoin, vous pouvez la spécifier dans le code de niveau, (par exemple emplacement1 (x, y) emplacement2 (x, y) etc.) la meilleure façon (je ne Je ne sais pas sur quel type de jeu vous travaillez) serait probablement de spécifier des emplacements dans le niveau et de faire en sorte que chaque unité les traite dans l'ordre spécifié par le niveau et après avoir atteint chaque emplacement, faites-le remplacer l'emplacement souhaité par le prochain, il doit arriver.
Il y a des tonnes de façons de modifier cela, comme avoir une liste d'emplacements en premier lieu pour chaque unité, car cela signifierait que toutes les unités ne doivent pas aller aux mêmes emplacements. Cependant, de la même manière, vous pouvez également le faire dans le code de niveau (unit1.location1 (x, y) unit1.location2 (x, y) grunt.l1 (x, y) knight.loc3 (x, y) peu importe)
Juste quelques idées! Je vous suggère de lire la version 3D même si elle est beaucoup moins pertinente.
EDIT: J'ai décidé de fournir les deux pour tous ceux qui pourraient lire ceci (oui c'est vrai) .... (Au départ, j'ai seulement survolé votre question et je n'ai pas réalisé qu'elle était assez spécifique à la 2D jusqu'à ce que je la relise>.>)