Un * chemin pour les obstacles dynamiques et les blocages créés par les joueurs?

11

Salut, je crée un TD dans Unity 5 et j'ai besoin d'aide pour mon Pathfinding.

Je vais utiliser Arons A * pathfinding pour mon IA, ce qui me permet d'utiliser des objets dynamiques et de mettre à jour le chemin pendant l'exécution. Cependant, dans mon jeu, je veux que le joueur puisse bloquer les serviteurs avec des tourelles spéciales qui forceront les serviteurs à attaquer la "tour de bloc" au lieu de passer à leur destination.

Comment pourrais-je accomplir quelque chose comme ça?

Image pour plus de clarté: entrez la description de l'image ici

Grimbox
la source

Réponses:

22

Je n'ai pas examiné l'implémentation spécifique de A * par Aaron, mais avec un A * normal, vous pouvez inclure la `` tour de bloc '' comme terrain praticable, mais mettre à jour l'heuristique de sorte que le `` coût '' soit beaucoup plus élevé qu'une tuile normale (de sorte que L'IA évaluera s'il est plus facile de détruire le bloc et de continuer ou de faire le tour par le chemin qui n'est pas bloqué).

Ensuite, vous devrez mettre à jour votre IA afin que lorsqu'un ennemi tente de passer d'une tuile normale à une «tuile tour de bloc», il attaque automatiquement jusqu'à sa destruction.

JackFrost
la source
8
+1 J'ajouterais que vous pourriez souhaiter que le coût de la tour de blocage soit calculé en fonction du temps qu'il faudrait au nombre X et au type de sbires pour la détruire, s'il y a une différence. Un coût prédéfini pour la tour peut être inexact si les sbires de niveau le plus bas mettent 5 secondes à la détruire, mais un super-sbire peut le faire en 1 seconde.
Fuzzy Logic
0

Si ce que vous recherchez est une sorte de tour de raillerie, vous pouvez y ajouter un collisionneur défini comme déclencheur et lorsque les sbires entrent dans le déclencheur, ils sont juste programmés pour attaquer la tour.

Si vous voulez que les sbires n'attaquent les tours que lorsqu'il n'y a pas de chemins alternatifs, alors lorsque le chemin est bloqué et que l'A * est appelé pour calculer un autre chemin s'il retourne nul, vous pouvez écrire aux ennemis pour trouver toutes les tours et les cibler.

Aux longues jambes7
la source