Configurez un projet VR dans UE 5.6, maîtrisez l'architecture VRPawn, le systeme d'input Enhanced Input et les Motion Controllers.
Le template VR officiel d'Unreal est le meilleur point de depart. Il est pré-configuré et contient tout le nécessaire pour commencer immediatement.
Contenu du VR Template :
Partir d'un projet vide est possible mais demande une configuration manuelle complete. Cette approche est utile pour comprendre chaque composant individuellement.
Etapes nécessaires :
| Plugin | Role | Obligatoire ? |
|---|---|---|
| OpenXR | Runtime multi-plateforme. Interface standard entre UE et les casques VR. Remplace les anciens plugins proprietaires (OculusVR, SteamVR). | Oui — obligatoire |
| OpenXR Hand Tracking | Extension OpenXR pour le suivi des mains sans controllers. Permet le hand tracking natif Quest. | Optionnel |
| Meta XR | Features spécifiques Quest : passthrough, scene understanding, body tracking, spatial anchors. | Recommande pour Quest |
| Enhanced Input | Systeme d'input moderne d'UE5 avec Input Actions et Mapping Contexts. Actif par défaut dans UE 5.6. | Oui — actif par défaut |
Les reglages du projet different considerablement selon que vous ciblez un casque standalone (Quest) ou un PC VR (via Link ou SteamVR).
| Setting | Standalone (Quest) | PC VR |
|---|---|---|
| Rendering API | Vulkan | DirectX 12 |
| Forward Shading | Oui (obligatoire) | Optionnel (Deferred possible) |
| Mobile HDR | — | |
| Instanced Stereo | ||
| Mobile Multi-View | — | |
| Start in VR | ||
| Plateforme cible | Android | Windows |
Ce choix de pipeline impacte directement les performances et les features visuelles disponibles.
En VR, chaque frame doit etre rendue deux fois (une par oeil). Instanced Stereo optimise ce processus en combinant les deux rendus en un seul draw call par objet.
Pour déployer sur Quest, des reglages spécifiques a la plateforme Android sont nécessaires dans Project Settings > Android.
| Parametre | Valeur |
|---|---|
| Minimum SDK API Level | 29+ (Android 10) |
| Target SDK Version | 32+ (requis par Meta Store) |
| Package Name | com.votrestudio.votreprojet (format reverse domain) |
| Orientation | Landscape (obligatoire pour VR) |
| SDK / NDK / JDK | Android Studio SDK, NDK r25+, JDK 17 (configures via UE) |
| Mode développeur Quest | Activer dans l'app Meta sur smartphone + compte développeur |
Comprendre la hierarchie des objets est fondamental. Voici comment s'organise un monde VR dans UE5 :
Le VRPawn est l'acteur qui represente le joueur dans le monde virtuel. Contrairement aux jeux classiques, il herite de Pawn et non de Character.
Le VROrigin est un Scene Component qui sert de point zéro pour tout le systeme de tracking VR. C'est le composant le plus important a comprendre.
Le Camera Component est enfant du VROrigin. Sa position et sa rotation sont entierement pilotees par le casque VR.
Chaque main est representee par un MotionControllerComponent enfant du VROrigin. Leur position et rotation sont trackees en temps reel.
| Propriete | MotionController_L | MotionController_R |
|---|---|---|
| Motion Source | Left | Right |
| Visuel | Display Device Model ou SkeletalMesh custom | Display Device Model ou SkeletalMesh custom |
| Composants enfants | Mesh, Grab Sphere, Widget Interaction | Mesh, Grab Sphere, Widget Interaction |
| Tracking | Position + rotation temps reel | Position + rotation temps reel |
En VR, le role du Player Controller est reduit car la rotation de la camera est geree par le tracking physique.
Utile pour :
Organisez vos fichiers de maniere claire des le depart. Voici la structure recommandée :
UE5 utilise le meme systeme Enhanced Input pour les jeux classiques et la VR. Il repose sur 4 concepts fondamentaux :
Voici les Input Actions standard pour un projet VR :
| Input Action | Type de valeur | Usage |
|---|---|---|
| IA_Grab_L / IA_Grab_R | Bool | Saisir un objet (grip gauche/droite) |
| IA_Trigger_L / IA_Trigger_R | Float (0 → 1) | Tir, selection, interaction (analogique) |
| IA_Teleport | Bool | Declencher la téléportation |
| IA_Move | Axis2D (Vector2D) | Locomotion continue (thumbstick) |
| IA_Turn | Axis2D (Vector2D) | Rotation snap/smooth (thumbstick) |
| IA_Menu | Bool | Ouvrir/fermer le menu |
| IA_ButtonA / IA_ButtonB | Bool | Actions contextuelles |
L'Input Mapping Context (IMC) relie chaque Input Action a un bouton physique. Voici un mapping typique :
| Input Action | Bouton physique | Modifiers |
|---|---|---|
| IA_Grab_R | Right Grip | — |
| IA_Trigger_R | Right Trigger | — |
| IA_Teleport | Right Thumbstick Y | Dead Zone 0.5 |
| IA_Turn | Right Thumbstick X | Dead Zone 0.3 |
| IA_ButtonA | Right A | — |
| IA_ButtonB | Right B | — |
| IA_Grab_L | Left Grip | — |
| IA_Trigger_L | Left Trigger | — |
| IA_Move | Left Thumbstick | Dead Zone 0.3 |
| IA_Menu | Left Menu | — |
L'Input Mapping Context doit etre ajoute au systeme Enhanced Input au demarrage du Pawn :
Une fois l'IMC ajoute, les Input Actions peuvent etre utilisees dans l'Event Graph du VRPawn. Chaque Input Action génère des événements selon le type de trigger :
Les 3 types de triggers principaux :
| Type | Valeur | Usage typique |
|---|---|---|
| Bool | true / false | Boutons A, B, X, Y, Menu |
| Float / Axis1D | 0.0 → 1.0 | Trigger (gachette), Grip |
| Vector2D / Axis2D | X: -1 → 1, Y: -1 → 1 | Thumbstick (joystick analogique) |
Les modifiers transforment la valeur brute avant qu'elle n'atteigne votre Blueprint :
| Modifier | Effet | Usage VR |
|---|---|---|
| Dead Zone | Ignore les petites valeurs sous un seuil | Thumbsticks — recommandé 0.2 a 0.5 pour eviter les mouvements parasites |
| Negate | Inverse l'axe (multiplie par -1) | Inverser la direction d'un axe si nécessaire |
| Scale | Multiplie la valeur par un facteur | Ajuster la sensibilite de rotation ou de mouvement |
| Swizzle | Reordonne les axes (X ↔ Y) | Quand l'axe du thumbstick ne correspond pas a l'axe attendu |
Chaque main du joueur est representee par un MotionControllerComponent attache au VROrigin. La propriete Motion Source définit quelle main est trackee (Left ou Right). La position et la rotation sont mises a jour automatiquement par le tracking du casque.
Voici la structure type d'un Motion Controller avec tous ses composants enfants :
Trois approches pour afficher les mains du joueur :
Affiche le modele natif du controller (Quest Touch). Simple a configurer, pas d'animation.
Mains 3D avec animations des doigts. Plus immersif, nécessite un AnimBP.
Option 3 : Pas de visuel — Le joueur tient directement un objet (arme, outil). Le mesh du controller est remplace par l'objet grab.
Les animations de doigts sont pilotees par les valeurs analogiques des inputs :
| Input | Doigt(s) | Valeur | Animation |
|---|---|---|---|
| Trigger | Index | 0 = etendu, 1 = replie | Blend entre pose ouverte et fermee |
| Grip | Majeur, annulaire, auriculaire | 0 = ouverts, 1 = fermes | Blend entre pose ouverte et poing |
| Thumbstick touch | Pouce | 0 = leve, 1 = pose | Pouce sur le stick ou leve |
L'Animation Blueprint utilise les valeurs GripValue et TriggerValue (Float 0-1) pour blender entre la pose ouverte et le poing (3 doigts) ou l'index replie.
Le Line Trace (raycasting) est fondamental en VR. Il permet de pointer, d'interagir avec l'UI, de téléporter et d'afficher un feedback laser.
Le principe : a chaque Tick, récupérer la position et la direction du controller, calculer un point final (portee 500-10000 cm), puis lancer un Line Trace By Channel. Si le trace touche un objet, surbrillancer et raccourcir le laser au point d'impact.
Le tracking des controllers n'est pas parfait en toutes circonstances. Il est important de connaitre les situations problématiques :
| Situation | Probleme | Solution |
|---|---|---|
| Mains derriere le dos | Hors du champ des cameras → prediction IMU (moins précise) | Design : eviter les interactions necessitant les mains hors champ |
| Environnement sombre | Le SLAM (tracking visuel) echoue sans lumiere suffisante | Jouer dans un espace correctement eclaire |
| Surfaces reflechissantes | Les miroirs perturbent le tracking visuel | Eviter les miroirs dans l'espace de jeu |
| Batterie faible | Signal degrade, tracking moins reactif | Surveiller le niveau de batterie des controllers |
Chaque controller expose des donnees de pose riches, accessibles via le node Get Motion Controller Data :
| Donnee | Type | Usage |
|---|---|---|
| Position | Vector | Ou se trouve la main dans le monde |
| Rotation | Rotator | Orientation de la main (pitch, yaw, roll) |
| Velocite lineaire | Vector | Vitesse de deplacement — force de lancer, inertie objets |
| Velocite angulaire | Vector | Vitesse de rotation — détection de gestes (twist, spin) |
Les fondamentaux techniques pour developper en VR dans Unreal Engine 5.6
| Topic | Duree | Points essentiels |
|---|---|---|
| 1. Configuration projet | VR Template, OpenXR + Meta XR, Instanced Stereo, Forward Shading (standalone), Start in VR | |
| 2. Architecture VR | VRPawn (Pawn pas Character), VROrigin, Camera (jamais forcer), Motion Controllers, GameMode dédié | |
| 3. Input VR | Enhanced Input, IA + IMC, Add Mapping Context au BeginPlay, Dead Zones, valeurs typees | |
| 4. Motion Controllers | Line Trace, animations mains, velocite pour throw, tracking quality, bonnes pratiques |