Actuellement, je développe un jeu de type Diablo pour plate-forme mobile (iphone5 +).
Une simple recherche A * trouvera le chemin, mais la prévention des collisions doit encore être prise en considération.
Il y aura environ 50 monstres actifs en même temps, donc les performances sont très importantes.
J'ai trouvé quelques méthodes qui pourraient fonctionner.
NavMesh + RVO
La bibliothèque de refonte / détour fonctionne bien sur la
pathfinding
pièce, mais sa simulation de foule atteint rapidement la limite (plus de 5 ms pour 30 agents).Une autre bibliothèque RVO2 semble correcte (moins de 2 ms pour 50 agents), mais la bibliothèque a quelques problèmes de licence.
Champs d'écoulement + moteur physique
De nombreux jeux RTS utilisent cette méthode, mais il semble qu'un moteur physique soit nécessaire pour résoudre les collisions. Si de nombreux agents ne partagent pas un objectif commun, cette méthode peut coûter plus cher que la recherche de chemin A * traditionnelle.
Comportements de direction + moteur physique
Les comportements de pilotage incluent de nombreux concepts, je pense que cela
simple avoidance behavior
pourrait fonctionner (il suffit de tourner à gauche / à droite s'il y a quelque chose en face), mais la méthode nécessite toujours un moteur physique pour fonctionner ensemble.
Je ne sais toujours pas lequel utiliser, il existe peut-être d'autres méthodes de recherche de chemin et d'évitement des collisions.
PS Halo:Spartan Strike
utilise Havok AI (basé sur RVO?), Mais je n'ai pas vu beaucoup d'ennemis dans ce jeu, donc je me demande si la première méthode (NavMesh + RVO) fonctionnera bien sur une plateforme mobile.
Réponses:
C'est une question assez intéressante, et je vais essayer de contribuer avec ce que je peux.
Tout d'abord, je pense que vous devez définir clairement les limites du jeu que vous essayez de créer et définir ces questions (certaines ont peut-être déjà reçu une réponse).
Pour citer une réponse d' ici sur la façon dont la recherche de chemin se fait dans Starcraft 2:
Revenons donc à vos 3 propositions:
Quelques notes sur les comportements de pilotage, vous pouvez définir autant de forces de pilotage que vous le souhaitez, avec les zones que vous souhaitez. Vous en avez besoin d'au moins 3 pour le flocage / l'attraction / la répulsion, mais d'autres sont probablement intéressants.
Ensuite, essayez de trouver une bibliothèque qui gère les comportements pour voir si elle correspond à vos besoins (comme ça ? Je n'en connais pas vraiment, mais elle existe).
Si la bibliothèque ne correspond pas à vos besoins, alors vous êtes prêt à vous amuser! Mais il y a suffisamment de ressources et d'algorithmes pour implémenter vous-même les comportements de flocage. Exemple 1 Exemple 2
Si vous choisissez de vous implémenter, sachez qu'il y a de belles optimisations à faire, car la portée de votre agent est réduite par exemple par son emplacement dans le troupeau. Il devrait de toute façon être inclus dans certains des algorithmes.
Eh bien, c'est le meilleur de ma connaissance, je ne suis pas sûr de toute façon
la source
Si les chemins ennemis ne sont pas très dynamiques (Dynamique serait que chaque couple d'agents attaquent différentes cibles et les chemins vers ces cibles doivent être mis à jour à chaque couple d'images)
Ensuite, je ferais une combinaison de champs de flux et de comportements de pilotage si la performance est votre principale préoccupation. Il y a des sujets plus compliqués impliqués comme le partitionnement de l'espace de vos agents, donc trouver des voisins est plus facile mais c'est votre meilleur pari pour les performances. (suppression de votre recherche A * et utilisation de champs de flux pour diriger vos agents)
Ces deux algorithmes combinés sont généralement considérés comme la solution la plus optimisée pour les scènes denses d'agent avec peu de cheminement dynamique.
J'éviterais la physique quelle que soit votre option finale car elle peut devenir lourde.
Les collisions entre agents peuvent être presque entièrement gérées par des comportements de pilotage et les champs de flux réduisent le poids de 50 agents calculant les trajets. Gardez à l'esprit cependant que les champs de flux deviennent de plus en plus chers plus la taille de votre carte est grande, plus la taille de votre grille est petite et plus votre sélection cible doit être dynamique.
la source