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.

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
- 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 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.
- 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.
Référence : XR Grab Interactable — documentation Unity.
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.
Référence : XR Ray Interactor — documentation Unity.
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. Le sujet original parle de l’option « Force Grab » ; repérez le réglage équivalent 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.
Référence : Near-Far Interactor — documentation Unity.
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
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 :
| 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. |
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.
- Sujet original — PDF en anglais.
- Canevas original du compte rendu — DOCX en anglais.
- Projet Unity 6.3 : fichiers du projet conservés ; APK précompilé et métadonnées macOS retirés pour alléger l’archive.
- Projet original Unity 2022.3.