Chez Audace, un projet de simulateur d'engins de travaux était en cours depuis longtemps. Ce projet, basé sur la réalité virtuelle, était initialement conçu pour fonctionner sur casque de réalité virtuelle, mais en tournant sur un ordinateur. Cependant, dans le cadre de son évolution, il devait être adapté pour fonctionner sur des casques autonomes. Actuellement, seul un prototype comportant une grue auxiliaire avait été développé sur ce nouveau projet.
Pour contrôler cette grue dans le simulateur, une boîte à boutons, similaire à celle utilisée dans la vraie vie, était utilisée. Cependant, une problématique est apparue lorsqu'il a été envisagé de commercialiser le projet sur les stores : les utilisateurs potentiels n'auraient pas accès à cette boîte à boutons physique. Il fallait donc trouver un autre moyen de contrôler la grue.
Ma mission consistait donc à résoudre ce problème en trouvant un moyen de mapper l'ensemble des boutons de la boîte à boutons sur les manettes de base des casques de réalité virtuelle. Avec un total de 18 actions (6 joysticks, 6 interrupteurs, 6 boutons) sur la boîte à boutons, cela représentait un défi pour une manette n'ayant que 10 boutons et 2 joysticks, tout en conservant une ergonomie optimale. Mais il ne fallait pas oublier que le type de contrôle en question pouvait être utilisé par un autre simulateur que la grue. La boîte à boutons permet de contrôler plusieurs engins. Il fallait aussi faire attention à ne pas interférer avec le contrôle du déplacement du joueur.
Pour commencer, j’ai donc utilisé un bouton de la manette (le bouton secondaire de la manette droite) pour pouvoir changer de mode de contrôle. Soit on contrôle le déplacement du joueur, soit on contrôle la grue.
Pour les joysticks, j'ai d'abord tenté de mapper deux joysticks de la boite à boutons sur chaque joystick des manettes (un pour l’axe X et un pour l’axe Y). Mais cette approche s'est révélée peu pratique en raison de la confusion dans les mouvements. Par exemple, si on voulait juste déplacer le joystick droit vers le haut, on pouvait aussi le déplacer un peu vers la droite ou vers la gauche. J'ai donc ajusté ma stratégie pour affecter une action par joystick, permettant ainsi une utilisation plus intuitive. J’ai dans un premier temps juste récupéré les valeurs de l’axe Y, mais il s’est avéré qu’il y avait encore quelque confusion lors de l’utilisation. J’ai donc incorporé une zone morte. Si la valeur de l’axe X dépasse cette zone morte, on ne récupère pas les valeurs de l’axe Y. De plus, j'ai ajouté un petit affichage à côté de la manette pour visualiser quelle action le joystick contrôle actuellement. Pour changer de joystick à contrôler, il suffit d’appuyer sur le bouton principal de la manette droite (ça passera du mode 0, au 1, au 2, au 0, etc.) .
Pour les interrupteurs et les boutons, j’ai réalisé une approche similaire. Je me suis dit qu'en incorporer 12 allait être trop compliqué par rapport aux nombres de boutons présents sur les manettes. J’ai donc opté pour un affichage en UI. Quand on clique sur le bouton principale ou secondaire de la manette gauche, cela ouvre l’interface des boutons ou des interrupteurs. Puis on le referme en réappuyant dessus.