Waypoint dans Unity

Bonjour a tous et bienvenu a ce petit demo sur comment integrer des Waypoint dans Unity.

Placement des waypoint dans unity

Donc le but ici est d’offrir au joueur un sphere qui pourait le guider lors des premieres parties. Ce sphere va suivre un systeme de waypoins dans unity pour suivre un chemin bien precis. Il y aura donc des points où le sphere va attendre le joueur, mais aussi des points qui ne servent que de repere pour un chemin plus long (comme sur la rampe dans la video).

Il faut donc definir le chemin que le sphere doit prendre. J’ai vulu rester simple en utilisante des GameObjects vides pour faire le parcours. le probleme est que ces waypoints ne sont pas tres visibles.

Pour y remedier, j’ai donc ajouter un petit gizmo sur un gameobject vide come ceci :

Code des waypoint

Cela nous permet de bien positionner notre chemin point par point. Il ne reste qu’à programmer notre sphere pour qu’il suit le waypoint dans unity.

L’idée est d’avoir une liste de ces waypoints avec la possibilité de definir si le sphere doit attendre le joueur ou pas a chaqu’un de ces points. J’ai donc créer un enum avec les deux etats (Wait et Passthrough) qui me permettront d’avoir une liste deroulante dans le UI de unity :

et une class qui peut contenir la position (transform) et l’etat du Waypoint.

voici le debut du code :

On va donc ajouter chaque waypoint dans l’ordre qu’on souhaite dans le UI de Unity et preciser la nature du point. Tout ceci sera stocké dans un array qu’on peut utiliser par la suite pour parcourir le chemin.

Pour que le visuel soit plus simple, j’utilise les gizmos pour ajouter une ligne comme ceci :

ceux qui nous donne ceci dans le UI :

Mouvement du holosphere entre les waypoint

Pour faire bouger l’holosphere, nous alons utiliser la fonction Vector3.MoveTowards() qui prend un origine, une destination et un temps. Nous pouvons donc definir l’origine comme la position actuel de notre sphere, la destination le prochain Waypoint et la vitesse un vitesse defini multiplié par time.deltatime pour avoir un mouvement fluide (et qui ralentis avec l’effet de bullet time deja implementer).

On va donc utiliser private Vector3 targetWaypointVectorPosition; pour stocker la position du prochain waypoint à atteindre et utiliser une fonction pour definir cette position et incrementer l’index de l’array Waypoints pour tout les autres manipulations que nous avons besoin.

Il y a egalement un sphere collider qui va se declancher quand le joueur est pres du sphere (et que la sphere est en attente du joueur) :

Holosphere et collider pour les waypoints dans unity

donc sans plus atendre, voici le code complet :

 

Leave a Reply

Your email address will not be published. Required fields are marked *