[MY-AL]Draw Navmesh

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Yruama
Messages : 97
Inscription : 26 Mai 2014 17:29

[MY-AL]Draw Navmesh

Message par Yruama » 27 Avr 2017 14:58

Bonjour,

Je travail sur un RPG au tour par tour avec comme base de déplacement : Divinity Original Sin : https://youtu.be/rciO3bG3tjU?t=17s

J'aimerais savoir comment il est possible de tracer un chemin de la même manière que ce qu'il y a dans la vidéo (tracé de point).
Je sais qu'il est possible de récupérer les "corners" du path. Mais une fois le "chemin" récupéré comment je peux le tracer ? Je regarde du coté de LineRenderer.

Autre petite particularité c'est que pour chaque personnage il y a une valeur de mouvement. C'est à dire qu'une unité ne peut se déplacer que de X unités (mètre). J'aimerais donc aussi pouvoir faire en sorte qu'entre chaque unité (de mesure) ce soint un autre type de point : O . . . O . . . O . . . O (avec O . . . O = 1 unité de mesure)

Merci de votre aide/conseil

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: [MY-AL]Draw Navmesh

Message par Axel74 » 29 Avr 2017 04:49

Peut être avec la fonction OnDrawGizmos, il est possible de "dessiner" forme, texture, mesh ...
Tu peux éventuellement calculer la position de ton prochain point dessiné à l'aide de la direction entre tes deux corner.

Tu déclares une intervalle de distance entre tes points. Tu récupères la position du corner1, puis la direction jusqu'au corner2.
Tu créer donc une texture de rond au point 1, que tu orientes sa position vers le point 2.
Ensuite pour avoir la position suivante, tu fais un nouveau vecteur de position que tu déclares comme ceci :

Code : Tout sélectionner

Vector3 point2 = point1;
point2.x += interval;
En gros chaque position de point représente le point précédent additionné de ton intervalle.

Par contre pour calculer une direction entre deux positions, pour ma part (dans un cas qui n'a rien à voir mais qui utilise les mêmes calculs) je m'y suis pris de cette manière :

Code : Tout sélectionner

Transform newPoint = new GameObject().transform;

// ce que tu obtiens avec le code ci dessus :
newPoint.position = point1;
Vector point2 = newPoint.transform.position;
point2.x += interval;
// Direction du corner1 vers le corner2
// Orienter point1 dans la direction calculée

// et ne surtout pas oublier de détruire cet objet à la fin comme ceci quand tu as fini
DestroyImmediate (newPoint);

Une fois réussi à faire ça, tu rencontreras un autre problème. Tu auras un calcul de position qui "dépassera" le corner2. Là il y aura juste à mettre des conditions de position pour dire qu'il ne faut pas aller plus loin, et qu'à partir de la position de ce corner2 il faut continuer dans la direction vers le corner3.
Douille ou l'ail que pote étaux ? Yes I like.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY-AL]Draw Navmesh

Message par Max » 29 Avr 2017 11:29

Axel74 a écrit :Peut être avec la fonction OnDrawGizmos, il est possible de "dessiner" forme, texture, mesh ...
attention, les Gizmos ne sont disponible que dans l'éditeur, donc très utile par exemple dans les phases de debug, mais pas vraiment en runtime lors de l’exécution de l'application ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
Axel74
Messages : 100
Inscription : 23 Mai 2014 16:47
Localisation : Thonon - Lyon

Re: [MY-AL]Draw Navmesh

Message par Axel74 » 29 Avr 2017 13:39

Max a écrit :
Axel74 a écrit :Peut être avec la fonction OnDrawGizmos, il est possible de "dessiner" forme, texture, mesh ...
attention, les Gizmos ne sont disponible que dans l'éditeur, donc très utile par exemple dans les phases de debug, mais pas vraiment en runtime lors de l’exécution de l'application ;)
Ah autant pour moi, je me sers que depuis peu cette fonction :cote: Dans ce cas en utilisant des instances d'UI ou d'un objet c'est réalisable je suppose. Je ne sais pas si il y a des méthodes moins gourmande en ressource mais voilà une idée !
Douille ou l'ail que pote étaux ? Yes I like.

Répondre

Revenir vers « (C#) CSharp »