Bonsoir à tous,
Je rencontre un p'tit souci avec le système de navmesh d’Unity et je ne sais pas trop comment passer outre.
En gros j’ai des unités qui se baladent sur un navmesh et je peux dynamiquement rajouter des obstacles sur leur chemin (je passe par un nav mesh obstacle avec la propriété carve à true).
La construction d’un obstacle se passe donc en deux étapes ; une première étape où l’obstacle en cours de construction suit le curseur de la souris et ne gène pas la progression des unités, et une deuxième étape (après un clic souris) où l’obstacle est effectivement placé sur la map (et son nav mesh obstacle component activé).
J’aimerais donc faire en sorte qu’avant de valider la construction de l’obstacle vérifier que ce dernier ne bloquera pas le chemin des unités en mouvement (le but est de faire faire des détours aux unités pas de les bloquer).
J’avais fait des essais avec NavMesh.CalculatePath(_spawn.position, _target.position, -1, _path); qui prend bien en compte mes obstacles dynamiques. Là où sa se corse c’est de faire un test en continu (ou quasiment en continu, pendant le placement à la souris de l’obstacle), j’ai donc naïvement écrit le code suivant :
Si vous avez une astuce à me communiquer pour que j'arrive à mes fins, vous aurez droit à ma reconnaissance éternel... au moins =P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 // J'active le nav mesh obstacle component de mon gameobject pour que mon obstacle // en cours de construction soit pris en compte dans le calcul du chemin. _baseTowerObstacle.enabled = true; // Je lance le calcul du chemin pour déterminer si mon obstacle bloque // le passage. NavMesh.CalculatePath(_spawn.position, _target.position, -1, _path); // Je désactive immédiatement le nav mesh obstacle component pour que mon obstacle // en cours de construction ne bloque pas les unités en mouvement. _baseTowerObstacle.enabled = false; if (_path.status == NavMeshPathStatus.PathComplete) { // Je ne bloque personne, je peux effectivement construire ma tour. } else { // Je bloque le chemin, je ne peux donc pas construire ma tour. // Problème : Je ne passe jamais ici, même lorsque j'ai une tour au milieu du chemin =/ }
D'avance merci ^^
Partager