Projet réalisé en binôme sur Unity en réalité virtuelle pour un Meta Quest 2.
Noms des participants : Florian BOISSET et Elisa MARCHAND.
Cette partie présentera une synthèse d’un rapport de projet réalisé
dans un cadre pédagogique de réalisation d’un Serious Game VR.
Le projet vise a concevoir deux experiences immersives de formation en
realite virtuelle : une simulation de tri de pneus et un simulateur de
grue. Les deux modules ont ete developpes autour d’une architecture
orientee evenements, d’une interaction utilisateur basee sur les outils
XR, et d’un systeme de score persistant. Cette synthese met en avant les
choix techniques, le deroulement des interactions, les criteres de
reussite, ainsi que les limites observees et les pistes
d’amelioration.
L’objectif de ce serious game est de proposer des situations proches du
terrain professionnel. Les objectifs principaux étaient les suivants
:
concevoir des interactions naturelles en realite virtuelle ;
structurer les comportements des objets et des interfaces via des evenements ;
fournir un retour immediat a l’utilisateur (visuel, sonore et score) ;
enregistrer les performances pour suivre la progression d’une session a l’autre.
Le systeme est compose de deux epreuves complementaires. La premiere evalue la capacite de l’utilisateur a identifier et trier des pneus selon leur conformite. La seconde evalue la precision de pilotage d’une grue dans un parcours variable. Ensemble, ces deux modules couvrent des competences de diagnostic, de coordination gestuelle et de maitrise operationnelle.
Le coeur du module est centralise dans un gestionnaire dedie (TireManager.cs). Le lancement de l’epreuve est realise par un bouton vert interactif VR. Lorsqu’une main entre dans la zone d’interaction, un evenement de type spawn est declenche et demarre la generation progressive des pneus.
Les pneus apparaissent a une position predeterminee dans la scene. Une coroutine permet d’etaler leur instanciation dans le temps afin d’obtenir un flux regulier et lisible pour le joueur. Chaque pneu instancie recoit automatiquement deux proprietes booleennes aleatoires :
isCorrect : indique si le pneu est conforme
;
isCodeBarreDetected : indique si son code est
detectable automatiquement.
Le démarrage de l’épreuve déclenche également un chronomètre. Un bouton rouge complète le dispositif en offrant une remise à zéro rapide de la scène (suppression des pneus présents).
Deux détecteurs coexistent dans l’exercice : un détecteur manuel et un détecteur automatique. Chacun dispose d’une zone trigger et d’un script de lecture des entrées. Selon le type de détection, des événements distincts sont émis.
Lors d’un scan manuel, le système lit directement la conformité du pneu et met à jour l’écran de console avec une information visuelle adaptée. Pour le scan automatique, la logique ajoute un contrôle préalable de la lisibilité du code-barres. Si le code n’est pas détectable, un état d’erreur spécifique est affiché.
Cette architecture offre un avantage important : la séparation entre acquisition des données (détecteurs), logique métier (gestionnaire), et restitution (console). Le comportement est plus facile à maintenir, à tester, et à étendre.
Le tri final est validé par des zones de dépôt (bennes), chacune associée à une détection d’entrée/sortie. Lorsqu’un pneu est déposé dans la bonne benne, le compteur de réussite est incrémenté ; s’il en ressort, le compteur est décrémenté. La victoire est atteinte lorsque 10 pneus sont correctement placés.
Une fois la victoire atteinte, un clavier virtuel est affiché pour saisir un nom ou pseudo. Le score (temps réalisé) est ensuite enregistré dans un dictionnaire, puis sauvegardé en local dans un fichier JSON. Ce choix permet de conserver un historique entre les sessions. Une liste triée des scores est finalement affichée, du meilleur au moins bon résultat.
Le module intègre plusieurs sons spatialisés reliés aux événements de jeu : apparition des pneus, bip de scan, collisions, appui sur les boutons et son de victoire. L’audio renforce la compréhension de l’action en cours et l’immersion globale. La spatialisation est particulièrement utile pour associer chaque son à son origine dans la scène.
Le simulateur de grue repose sur un assemblage de joints physiques (fixed joints et configurable joints) permettant des rotations contrôlées sur des axes précis. Cette décomposition mécanique reproduit le comportement attendu d’un bras articulé : mouvements verticaux, rotation autour de la base et orientation de l’effecteur.
L’utilisateur agit au moyen de deux poignées VR saisissables, associées aux mains gauche et droite. Cette contrainte bimanuel est pertinente pédagogiquement, car elle simule une coordination motrice proche d’une tâche réelle de conduite d’engin.
Le parcours est activé via un bouton vert et désactivé via un bouton rouge. La ligne de guidage est générée aléatoirement entre 5 et 10 segments, ce qui limite l’effet de mémorisation et encourage l’entraînement sur des configurations variées.
Le parcours comporte un bloc de début et un bloc de fin. Le bloc de début initialise le score et signale l’entrée correcte dans la ligne. Durant le trajet :
lorsque l’effecteur reste sur la ligne, celle-ci est affichée en vert ;
lorsque l’effecteur sort de la ligne, elle devient rouge et le score diminue progressivement.
Le bloc de fin met fin à l’épreuve et déclenche l’affichage du clavier virtuel pour l’enregistrement du score, avec une logique similaire à celle du module pneus.
Le module grue inclut un habillage sonore plus minimaliste, principalement axé sur le son de fin de parcours. Ce choix reste cohérent avec l’objectif de concentration motrice, mais pourrait être enrichi par des retours intermédiaires (alerte de sortie de ligne, confirmation de reprise de trajectoire, etc.).
Le projet atteint ses objectifs principaux : proposer deux situations de formation VR interactives, reposant sur des mécanismes robustes (événements, triggers, persistance de données) et un retour utilisateur multi-modal. L’utilisation de scripts spécialisés et de points d’entrée clairs facilite la maintenance du code et la compréhension de la logique applicative.
Plusieurs axes d’amélioration ont toutefois été identifiés :
Stabilité physique des pneus : certaines déformations apparaissent lors de la prise en main ;
Équilibrage de la préhension sur la grue : la priorité de la poignée droite peut provoquer des comportements incohérents ;
Robustesse du système de score : absence de majuscules et validation incomplète de la saisie dans certaines versions de build.
A moyen terme, des améliorations concrètes peuvent être envisagées : validation stricte des entrées clavier, meilleur traitement des doublons de pseudo, enrichissement des feedbacks sonores contextuels, et ajout d’indicateurs visuels d’aide à la correction en temps réel. Ces évolutions renforceraient à la fois la fiabilité technique et la valeur pédagogique du serious game.
Cette synthèse montre que le Serious Game VR constitue une base solide pour des scénarios de formation immersive. Les deux exercices sont complémentaires et exploitent efficacement les possibilités de la réalité virtuelle : manipulation naturelle, évaluation continue, et mémorisation des performances. Avec quelques ajustements techniques et ergonomiques, la solution peut évoluer vers un outil de formation encore plus précis, stable et adaptatif.