Le projet TSO est un simulateur de bourreuse. Il s’agit d’une machine utilisé dans la construction et l’entretien ferroviaire pour ajuster l’alignement des rails et compacter le ballast sous les traverses.
Ma première tâche à été de placer les splines sur tous les rails de la scène. Ceux-ci sont utilisés pour déplacer la bourreuse sur le chantier. En effet, elle se dirige vers le prochain point de sa liste. Il faut beaucoup de points différents pour que le déplacement soit fluide dans les virages.
Ici chaque flèche est un point différent et les segments bleu sont déjà réalisés. Chaque spline possède un script “Voie” qui contient deux variables : “Next Aiguillage” et “Previous Aiguillage”. On ajoute un script “Aiguillage Simpliste” ou “Aiguillage Classique” pour chacun des côtés de la voie. Généralement la voie à 2 côtés et donc 2 voies voisines. Mais par exemple une voie qui serait au bout du parcours n’aura qu’une voisine. Alors dans ce cas la il faut laisser la variable vide. Si la voie donne sur 2 voies possible, alors il faut mettre “Aiguillage Classique” car elle contient les deux splines en attribut et un boolean pour choisir la voie qui est activée. Voici comment fonctionnent les aiguillages. Si par contre c’est une voie simple et pas un aiguillage alors il faut utiliser “Aiguillage Simpliste”.
Ici nous avons l’exemple de Spline 9 qui est un aiguillage et qui a un côté avec une aiguillage simpliste et l’autre un aiguillage classique
Ma seconde tâche a été d’incorporer un module interne à l’entreprise. Ce module est le MultiCast. Il permet d’avoir une interface pour les formateurs sur tablette ou ordinateur qui contient la vue de tous les apprenants. Il utilise le package “Miror” pour fonctionner.
Ce n'était pas très compliqué de l’ajouter au projet car celui-ci est bien pensé. Il faut juste mettre le prefab “MultiCastPrefab” dans nos 2 scènes (celle du client et celle du serveur) et choisir le bon paramètre dessus. La scène cliente envoie la texture de sa main caméra au serveur en continu une fois qu’elle est connectée. Pour fonctionner il faut que les 2 appareils soient connectés sur le même réseau wifi. Si on veut tester sur unity il nous faut obligatoirement 2 Unity d’ouvert, ce qui n'est pas possible. Nous utilisons donc un asset qui se nomme “Parrel Sync” et qui permet d’ouvrir un clone de notre projet. Il est impossible d’effectuer une sauvegarde après avoir effectué des changements sur ce clone. Mais il permet de lancer nos deux scènes en même temps.
Ma troisième tâche est une suite directe aux deux premières. Il fallait que je trouve un moyen de pouvoir contrôler les aiguillages depuis l’application du formateur. Il fallait que je cré une nouvelle page sur la vue du serveur qui permettrait ce contrôle. Pour cela j’ai ajouté un bouton qui permet d’ouvrir cet interface.
Dessus j’ai affiché le plan des rails avec les aiguillages. J’ai ajouté un bouton de type “Toggle” à côté de chaque aiguillage. Quand on passe la souris sur l’aiguillage ou le bouton, l’aiguillage se met en bleu. L’aiguillage est blanc avec la partie de la voie dans lequel il est tourné est en vert. Quand on clique sur un bouton il change visuellement et ne fonctionne pas en réseau puisque je ne m’en suis pas encore occupé.
Avant de réaliser la communication entre le client et le serveur j’ai voulu rendre les choses plus propres en réalisant un contrôle d’aiguillage sur le client. J’ai créé 2 scripts : “SplineAiguillageConvcerteur” et “AiguillageController”. Le premier permet de choisir les bon paramètres du ou des splines pour un aiguillage. Et le second est le contrôleur. Voici le fonctionnement du contrôleur :
Il contient deux listes, la première est une liste de “SplineAiguillageConverteur” et la deuxième est une liste de boolean. J’ai fait en sorte que quand on modifie un boolean dans l’éditeur d’unity celui-ce appel la fonction en question qui change la valeur l’aiguillage dans “SplineAiguillageConverteur”. Il y a aussi une petite subtilité dont je n’ai pas encore parlé. Il s’agit du TJD (traversée jonction double) et du TJS (traversée jonction simple). Il y a ces 2 versions dans la scène et par la suite on pourra choisir celui que nous voulions depuis l’application du formateur. Et leurs fonctionnement est différent donc j’ai créé une enum qui permet de choisir la bonne. Quand on sélectionne TJD il y a un élément de plus dans la liste booléenne que quand on sélectionne TJS. J’ai donc fait en sorte que cela se fasse automatiquement quand on modifie l’enum dans l’inspecteur. J’ai aussi fait en sorte qu’il ajoute le bon aiguillage dans la liste des “SplineAiguillageConverteur” et enlève le mauvais.
Pour finir cette étape j’ai lié le serveur au client pour que quand on clique sur un bouton d’aiguillage, celui-ci envoie l’information au client qui le modifie à son tour.
Avant de travailler sur la partie serveur, on pouvait lancer le scénario directement côté client. Ma dernière tâche était de refaire la page de choix des paramètres du scénario avant de pouvoir le commencer. Il y a 3 pages différentes. La première permet de choisir le scénario, la deuxième permet de choisir l’état de l’environnement et la dernière permet de choisir les obstacles présents sur les rails.
Pour envoyer les infos sur l’état de l'environnement ainsi que les obstacles ce n’était pas très compliqué. J’ai fait comme pour les aiguillages. Cependant pour le choix du scénario cela était un peu plus compliqué. En effet, il fallait que quand le client recevait les informations, il devait charger la bonne scène. Et donc il fallait que je cré un hub qui ensuite charge la bonne scène. Pour le moment, on était directement dans la scène de test. J’ai créé un écran noir pour le hub ainsi que sur la scène de test qui s’enlève une fois qu’on la charge. Il fallait cependant stocker les autres informations de la scène (états de l’environnement et obstacles). Donc je l' ai stocké dans un script présent dans la scène “DontDestroyOnLoad”.
Jusqu’à présent j’envoyais les donnés du serveur au client quand on appuyait sur le bouton “GO”. Cependant si le client se coupe l’application et la relance ou qu’il y a eu une déconnexion puis une reconnexion, le client ne dispose plus des informations voulues. Donc maintenant quand on fini nos choix, ceux-ci sont stockés puis envoyé au clique du bouton mais aussi à chaque connexion.