TP — Interaction 3D : techniques de manipulation

Saisie directe, rayon virtuel, Near Far et manipulation bimanuelle : concevoir et comparer des techniques d’interaction en réalité virtuelle.

RVRA · RVSI · Interaction 3D
Tâche expérimentale
Construire une tour · 2 min par essai
Projet fourni
Unity 6.3 · XRI 3.3.0
OpenXR 1.16.0
Prérequis
Bases Unity et VR · Casque et contrôleurs

Vous allez comparer des techniques de manipulation sur une tâche commune : construire une tour de blocs bleus et jaunes en deux minutes. L’objectif est de comprendre comment la sélection, le point de saisie et l’interaction à distance influencent la précision, la rapidité et l’effort.

Ce TP prolonge les initiations à Unity et à la VR. La scène et les scripts de la tâche sont fournis : votre travail porte sur la configuration des interactions et leur évaluation.

IMT Atlantique · Brest TP original de Cédric Fleury, cours de RVRA, parcours RVSI de la FISE.

Plan du TP

La tâche : une tour bicolore

Le générateur bleu à gauche produit des blocs bleus ; le générateur jaune à droite produit des blocs jaunes. Transportez-les sur la plateforme centrale pour construire la tour.

  • Chaque étage comporte deux blocs de même couleur.
  • Les blocs d’un étage sont perpendiculaires à ceux de l’étage précédent.
  • La couleur alterne d’un étage au suivant : bleu, jaune, bleu…
  • Un essai dure 2 minutes. À la fin, comptez les étages complets encore debout qui respectent ces règles.

La scène du TP : générateurs à gauche et à droite, plateforme centrale et chronomètre.

Scène du TP original de Cédric Fleury. Le sujet mentionne un record de 19 étages après deux essais : un repère historique, sans objectif imposé pour cette séance.

1. Prendre en main le projet et les interactions de base

Ouvrir la bonne version

  1. Téléchargez le projet Unity 6.3, décompressez-le, puis ajoutez le dossier Interaction3D dans Unity Hub > Add project from disk. Ouvrez le dossier qui contient Assets, Packages et ProjectSettings.
  2. Le projet a été enregistré avec 6000.3.1f1. Utilisez la version prévue pour votre séance et conservez une copie avant toute conversion. Attendez la résolution des packages et vérifiez l’absence d’erreurs dans Console.
  3. Ouvrez Assets/Scenes/Interaction.unity. Repérez les deux générateurs, la plateforme, le chronomètre et les contrôleurs.
  4. Pour un Quest autonome, vérifiez les modules Android de Unity, File > Build Profiles, la plateforme Android/Meta Quest, la scène à construire et les réglages XR. Suivez si nécessaire la partie déploiement du TP d’initiation VR. Faites Build And Run sur le casque préparé pour le développement.

Essayer la tâche

Les commandes ci-dessous sont celles du sujet fourni pour les contrôleurs Touch. Vérifiez leurs bindings dans le projet si vous utilisez un autre matériel.

CommandeAction
Joystick gaucheSe déplacer dans la scène.
Bouton XChanger de mode de navigation, notamment vers la téléportation.
Contact du contrôleur droit + gâchette de l’indexSaisir un bloc ou sélectionner un générateur / le bouton Reset.
Bouton B à droite / Y à gaucheChanger de technique sur la main correspondante, une fois plusieurs modes configurés.
  1. Essayez la navigation continue puis la téléportation. Choisissez une position qui permet d’atteindre les générateurs et la tour.
  2. Générez quelques blocs, saisissez-les, orientez-les puis relâchez-les sur la plateforme.
  3. Réinitialisez la scène et réalisez un premier essai chronométré. Le script fourni démarre le chronomètre à la première génération de bloc après réinitialisation.
  4. Notez votre premier score, puis votre meilleur score après quelques essais. Gardez le même nombre d’essais pour comparer les configurations.

À consigner — partie 1 du compte rendu : les deux scores, le mode de navigation préféré et les raisons de ce choix pour cette tâche.

2. Préparer le changement de technique sur chaque contrôleur

Le composant Controller Manager (ControllerManager.cs) permet de changer d’interactor en cours d’exécution, sans reconstruire l’application pour chaque comparaison.

  1. Sélectionnez le contrôleur droit, puis le gauche, et repérez Controller Manager et son action Switch Mode.
  2. Chaque mode doit être un enfant direct du contrôleur et porter le tag ControllerMode. Prenez le Direct Interactor existant comme exemple.
  3. Ajoutez les prochains modes comme frères du Direct Interactor, dans l’ordre où vous voulez les tester. Vous pouvez placer un ensemble de composants sous une racine de mode portant le tag.
  4. Au démarrage, le script recense ces enfants, désactive les modes puis active le premier. B ou Y passe au suivant en désactivant les autres. Avec un seul mode, le bouton ne produit aucun changement visible.

Exemple d’organisation des modes sous le contrôleur droit : Direct, Ray, Ray Force Grab et Near Far.

Exemple de hiérarchie issu du sujet original. Le nom des objets peut légèrement varier.

Vérification : après avoir ajouté un second mode, contrôlez en Play qu’une seule racine de mode est active sur chaque main. Relâchez les objets avant de changer de mode. Le tag doit être placé sur l’enfant direct, car le script ne parcourt pas les petits-enfants pour établir sa liste.

3. Modifier le point de saisie des blocs

La saisie initiale ramène le bloc vers son point d’attache configuré. Comparez-la à une saisie qui conserve le point de contact.

  1. Dupliquez chacun des deux générateurs. Distinguez visuellement les nouvelles versions, tout en gardant une famille bleue et une famille jaune.
  2. Dans Assets/Prefabs, dupliquez Blue_cube et Yellow_cube. Nommez les copies, par exemple, Blue_cube_Dynamic et Yellow_cube_Dynamic.
  3. Sur chaque copie, dans XR Grab Interactable, activez Use Dynamic Attach. Examinez Match Position, Match Rotation et Snap To Collider Volume. Comparez leur effet, un réglage à la fois.
  4. Dans le composant Generate Cube de chaque nouveau générateur, assignez le prefab correspondant au champ Cube. Conservez la référence au chronomètre.
  5. Testez la saisie près du centre puis à une extrémité. Comparez le placement et l’orientation à ceux des blocs d’origine, puis refaites la tâche.

À consigner — partie 3 : avantages et limites de Dynamic Attach pour saisir, tourner et poser les blocs. Appuyez-vous sur des situations observées.

Référence : XR Grab Interactable — documentation Unity.

4. Ajouter un rayon virtuel

Configurer la sélection à distance

  1. Ajoutez un XR Ray Interactor comme enfant du contrôleur droit : clic droit dans Hierarchy, XR > Ray Interactor. Nommez ce mode Ray et ajoutez le tag ControllerMode sur sa racine.
  2. Dans Interaction Layer Mask, autorisez les couches des blocs et des générateurs, mais excluez la couche réservée à la téléportation (nommée Teleport ou Teleport Layer selon le projet).
  3. Dans Input Configuration, configurez Select Input pour la gâchette droite, en reprenant la référence d’action du Direct Interactor fourni. Ne supposez pas que le binding Select du TP précédent utilise le même bouton.
  4. Désactivez UI Interaction pour cette activité. Vérifiez l’origine et la direction du rayon ainsi que ses composants de ligne.
  5. Exécutez, passez au mode Ray avec B, puis testez la génération et la saisie à distance.

Vérification : le rayon sélectionne les blocs et les générateurs, sans déclencher la téléportation. Un objet doit partager une couche d’interaction XRI avec l’interactor et être détectable par son raycast physique : Interaction Layer Mask et Raycast Mask sont deux filtres distincts.

Comparer les variantes

Dupliquez le mode Ray sous le même contrôleur et donnez un nom explicite à chaque variante. Conservez les entrées et les filtres pour ne changer que l’option étudiée.

VarianteRéglage à comparerObservation attendue
Rayon de baseForce Grab désactivéManipulation du bloc à distance.
Rayon avec rappelForce Grab activéLe bloc sélectionné est ramené à la main.
Attache manipulableManipulate Attach Transform activéDéplacement de l’attache au joystick ; vérifiez les entrées de translation/rotation.

Refaites un essai avec chaque variante. Examinez l’accès aux générateurs, le transport vers le centre, la rotation des blocs et la précision du relâchement. Si le joystick pilote plusieurs actions, vérifiez leurs bindings et leur concurrence avec la locomotion.

À consigner — partie 4 : bénéfices du rayon par rapport à la saisie directe, bénéfices de la saisie directe, intérêt et limites de Force Grab, utilité de Manipulate Attach Transform, configuration préférée et meilleur score obtenu.

Référence : XR Ray Interactor — documentation Unity.

5. Tester Near Far

  1. Dans Assets/Samples/XR Interaction Toolkit/3.1.2/Starter Assets/Prefabs/Interactors, trouvez Right_NearFarInteractor. Ajoutez-le sous le contrôleur droit comme un nouveau mode.
  2. Placez le tag ControllerMode sur sa racine. Vérifiez les références de main droite, les entrées Select et les filtres d’interaction, comme pour le rayon. Désactivez l’interaction UI pour garder les mêmes conditions.
  3. Testez la sélection d’un bloc proche, puis d’un bloc éloigné. Observez comment la technique combine l’interaction de proximité et à distance.
  4. Comparez Far Attach Mode = Near et Far : dans la documentation XRI 3.3, ce réglage contrôle le rappel à la main ou le maintien à distance. Le sujet original parle de l’option « Force Grab » ; repérez le réglage équivalent dans le composant installé.
  5. Réalisez la tâche avec les deux variantes. Créez deux modes si vous souhaitez les comparer avec B, sans nouvelle compilation.

À consigner — partie 5 : technique vue en cours qui s’en rapproche le plus, avantages et inconvénients pour la tâche, et difficultés éventuelles lors des transitions proche/loin. Justifiez par vos essais.

Référence : Near-Far Interactor — documentation Unity.

6. Manipuler avec les deux mains

  1. Ajoutez aussi des modes de manipulation au contrôleur gauche. Utilisez le prefab Left_NearFarInteractor pour Near Far, ou adaptez les entrées et la latéralité d’un rayon à la main gauche.
  2. Vérifiez les tags et les actions. Y change le mode gauche et B le mode droit ; ne conservez pas les actions de la main droite sur les deux mains.
  3. Testez une combinaison symétrique puis une combinaison où chaque main a un rôle différent : par exemple, approvisionner d’un côté et positionner de l’autre.
  4. Comparez-les à votre meilleure configuration à une main, avec les mêmes règles et la même durée.

L’objectif est de manipuler deux blocs ou de répartir les actions entre les mains. Il n’est pas nécessaire d’activer la sélection simultanée d’un même bloc par les deux contrôleurs.

À consigner — partie 6 : bénéfices de deux techniques, combinaison la plus efficace, justification et meilleur nombre d’étages.

Comparer les résultats et rédiger le compte rendu

Utilisez le canevas original en anglais et les questions traduites dans cette page. Consultez aussi les consignes générales du compte rendu. La numérotation des questions reprend celle du sujet : la partie 2 prépare les interactions et ne possède pas de rubrique distincte dans le canevas.

Pour chaque configuration, gardez une trace des réglages réellement testés :

ConfigurationMain gauche / droitePoint de saisieOptionsEssai 1Meilleur scoreObservations
Directe initialeÀ préciserInitialNavigation choisie………
Directe dynamiqueÀ préciserDynamiqueRéglages d’attache………
RayonÀ préciserÀ préciserForce Grab / attache………
Near FarÀ préciserÀ préciserFar Attach Mode………
Deux mainsÀ préciserÀ préciserCombinaison choisie………

Prévoyez un court entraînement comparable, réinitialisez entre les essais et notez le nombre de répétitions. Distinguez la performance mesurée du ressenti : une technique peut être rapide tout en demandant davantage d’effort. L’apprentissage peut améliorer les scores au fil de la séance ; ne concluez pas à la supériorité générale d’une technique sur la base du seul meilleur essai.

Avant de terminer : conservez la scène, les prefabs modifiés et les fichiers Packages. Votre application doit permettre de changer les modes sans reconstruire, de générer les deux couleurs, de réinitialiser la tâche et de la réaliser avec une ou deux mains.

En cas de difficulté

SymptômePoints à vérifier
B / Y ne change rienPlusieurs enfants directs tagués ControllerMode, action Switch Mode et ordre dans la hiérarchie.
Le rayon est visible, mais ne saisit rienSelect Input, colliders, Interaction Layer Mask, Raycast Mask et composant interactable sur la cible.
Le rayon déclenche la téléportationExclure sa couche des modes de manipulation et vérifier les entrées partagées.
Le nouveau générateur produit les anciens blocsChamp Cube du composant Generate Cube et prefab réellement modifié.
Near Far utilise la mauvaise mainPrefab gauche/droit, Handedness et références d’actions.
Plus de génération après la fin du tempsUtiliser Reset avant de relancer : le chronomètre fourni exige une réinitialisation.
Le casque ne lance pas la scèneScène de build, plateforme, fournisseur XR et connexion ; reprendre le TP d’initiation VR.

Auteur et ressources originales

TP original conçu par Cédric Fleury pour le cours de RVRA, parcours RVSI de la FISE IMT Atlantique, campus de Brest. Contact figurant sur le sujet : cedric.fleury@imt-atlantique.fr.

Cette page en propose une adaptation web en français et en anglais, à partir du sujet et des ressources fournis pour l’année 2025–2026. Les illustrations de la tâche et des contrôleurs proviennent du sujet original.