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.

- 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.

Construisez une tour aussi haute que possible pendant chaque essai.
1. Prendre en main le projet et les interactions de base
Ouvrir la bonne version
- Téléchargez le projet Unity 6.3, décompressez-le, puis ajoutez le dossier
Interaction3Ddans Unity Hub > Add project from disk. Ouvrez le dossier qui contientAssets,PackagesetProjectSettings. - 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.
- Ouvrez
Assets/Scenes/Interaction.unity. Repérez les deux générateurs, la plateforme, le chronomètre et les contrôleurs. - 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.
| Commande | Action |
|---|---|
| Joystick gauche | Se déplacer dans la scène. |
| Bouton X | Changer de mode de navigation, notamment vers la téléportation. |
| Contact du contrôleur droit + gâchette de l’index | Saisir un bloc ou sélectionner un générateur / le bouton Reset. |
| Bouton B à droite / Y à gauche | Changer de technique sur la main correspondante, une fois plusieurs modes configurés. |
- Essayez la navigation continue puis la téléportation. Choisissez une position qui permet d’atteindre les générateurs et la tour.
- Générez quelques blocs, saisissez-les, orientez-les puis relâchez-les sur la plateforme.
- 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.
- 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.
- Sélectionnez le contrôleur droit, puis le gauche, et repérez Controller Manager et son action Switch Mode.
- Chaque mode doit être un enfant direct du contrôleur et porter le tag ControllerMode. Prenez le Direct Interactor existant comme exemple.
- 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.
- 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 de hiérarchie du projet. 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.
- Dupliquez chacun des deux générateurs. Distinguez visuellement les nouvelles versions, tout en gardant une famille bleue et une famille jaune.
- Dans
Assets/Prefabs, dupliquez Blue_cube et Yellow_cube. Nommez les copies, par exemple,Blue_cube_DynamicetYellow_cube_Dynamic. - 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.
- 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.
- 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.
4. Ajouter un rayon virtuel
Configurer la sélection à distance
- Ajoutez un XR Ray Interactor comme enfant du contrôleur droit : clic droit dans Hierarchy, XR > Ray Interactor. Nommez ce mode
Rayet ajoutez le tag ControllerMode sur sa racine. - 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
TeleportouTeleport Layerselon le projet). - 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.
- Désactivez UI Interaction pour cette activité. Vérifiez l’origine et la direction du rayon ainsi que ses composants de ligne.
- 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.
| Variante | Réglage à comparer | Observation attendue |
|---|---|---|
| Rayon de base | Force Grab désactivé | Manipulation du bloc à distance. |
| Rayon avec rappel | Force Grab activé | Le bloc sélectionné est ramené à la main. |
| Attache manipulable | Manipulate 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.
5. Tester Near Far
- 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. - 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.
- Testez la sélection d’un bloc proche, puis d’un bloc éloigné. Observez comment la technique combine l’interaction de proximité et à distance.
- 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. Repérez ce réglage dans le composant installé.
- 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.
6. Manipuler avec les deux mains
- 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.
- 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.
- 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.
- 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
Suivez les consignes générales du compte rendu : rendez un rapport PDF avec en-tête, progression illustrée et bilan final. Fournissez le lien vers votre dépôt Git accessible à l’enseignant, avec les indications nécessaires pour lancer le projet. Les mentions « À consigner » renvoient aux étapes de ce TP : intégrez leurs réponses dans votre rapport, sans rendre de questionnaire séparé.
Compléments attendus pour ce TP
En plus des éléments demandés dans les consignes générales :
- Étape 1 — référence initiale : indiquez le premier et le meilleur score, le nombre d’essais et le mode de navigation retenu, avec une justification.
- Étape 2 — changement de modes : montrez la hiérarchie des modes et expliquez comment vous avez vérifié le changement sur chaque main. Cette étape fait partie de la progression à documenter.
- Étape 3 — Dynamic Attach : précisez les réglages testés et leurs avantages et limites pour saisir, tourner et poser les blocs.
- Étape 4 — rayon : comparez saisie directe et rayon, puis les effets de Force Grab et Manipulate Attach Transform. Justifiez votre configuration préférée et donnez son meilleur score.
- Étape 5 — Near Far : rapprochez cette technique d’une technique vue en cours ; comparez les modes Near et Far et décrivez les avantages, limites et transitions proche/loin observés.
- Étape 6 — deux mains : précisez la technique affectée à chaque main, les bénéfices observés et la combinaison la plus efficace, avec justification et meilleur score.
- Bilan comparatif : rassemblez vos résultats dans le tableau ci-dessous, avec une ligne par variante réellement testée. Indiquez le nombre d’essais et les conditions de comparaison (durée de deux minutes, entraînement, navigation, matériel et personne réalisant les essais). Discutez précision, rapidité et effort à partir de vos observations, en distinguant scores et ressenti.
Utilisez des captures légendées de vos propres configurations et essais pour étayer ces points : hiérarchie des modes, réglages utiles et résultat de la tâche. Gardez les explications brèves ; les questions servent à guider l’analyse dans les étapes du rapport.
Pour chaque configuration, gardez une trace des réglages réellement testés :
| Configuration | Main gauche / droite | Point de saisie | Options | Essai 1 | Meilleur score | Observations |
|---|---|---|---|---|---|---|
| Directe initiale | À préciser | Initial | Navigation choisie | … | … | … |
| Directe dynamique | À préciser | Dynamique | Réglages d’attache | … | … | … |
| Rayon | À préciser | À préciser | Force Grab / attache | … | … | … |
| Near Far | À préciser | À préciser | Far Attach Mode | … | … | … |
| Deux mains | À préciser | À préciser | Combinaison 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ôme | Points à vérifier |
|---|---|
| B / Y ne change rien | Plusieurs enfants directs tagués ControllerMode, action Switch Mode et ordre dans la hiérarchie. |
| Le rayon est visible, mais ne saisit rien | Select Input, colliders, Interaction Layer Mask, Raycast Mask et composant interactable sur la cible. |
| Le rayon déclenche la téléportation | Exclure sa couche des modes de manipulation et vérifier les entrées partagées. |
| Le nouveau générateur produit les anciens blocs | Champ Cube du composant Generate Cube et prefab réellement modifié. |
| Near Far utilise la mauvaise main | Prefab gauche/droit, Handedness et références d’actions. |
| Plus de génération après la fin du temps | Utiliser Reset avant de relancer : le chronomètre fourni exige une réinitialisation. |
| Le casque ne lance pas la scène | Scène de build, plateforme, fournisseur XR et connexion ; reprendre le TP d’initiation VR. |