Premier commit du cinquième front. Trois parties : - `unity/MyInfoMateVR/` : le projet Unity (6000.0.83f1, URP, Meta XR SDK 205), un APK unique pour tous les clients. Menu flottant à sélection au regard, appairage, chargement de scène GLB, POI, cache de contenu, télémétrie. - `unity-overlay/` : les mêmes scripts à recopier sur un projet Unity neuf, avec les pièges rencontrés consignés dans son README. - `viewer/` : viewer et éditeur de scène web autonome (Vite, TypeScript, three.js), partagé avec les autres fronts. - `docs/` : état des lieux, setup Unity, décisions d'architecture et plan d'exécution en 9 étapes. La scène est décrite par un `scene.json` poussé par `adb push` : l'app le préfère à celui embarqué dans l'APK. Les binaires (GLB, textures de l'échantillon Sponza, DLL Meta XR) passent par Git LFS dès ce premier commit — les y faire entrer après coup demanderait de réécrire l'historique. Les artefacts régénérés par l'éditeur et par CMake (`Library/`, `.utmp/`, Burst debug) sont ignorés. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.4 KiB
vr-app — canal VR MyInfoMate (Meta Quest)
Repo du cinquième front de l'écosystème : l'application Unity qui tourne sur casque Meta Quest, et toute la documentation du module VR (back-office compris).
Nommage aligné sur les autres repos : manager-app, tablet-app, visitapp-web, vr-app.
Contenu
| Chemin | Rôle |
|---|---|
docs/00-phase1-etat-des-lieux.md |
À lire en premier. Relevé du code existant des 4 repos, ce qui est réutilisable, ce qui manque, points de friction |
docs/01-phase0-setup-unity.md |
Guide d'installation Unity + Meta XR, pas à pas, pour quelqu'un qui n'a jamais ouvert Unity |
docs/02-decisions.md |
Les 6 arbitrages d'architecture du module (modèle de contenu, placement, viewer, kiosk, périmètre V1, personnages) |
docs/03-phase2-conception.md |
Manifeste de scène, modèle de données, contrat d'API, flux de génération, structure Unity et viewer web |
docs/04-phase3-plan.md |
Le plan d'exécution. 9 étapes, chacune avec ce que je génère / ce que tu fais / le critère de validation |
unity-overlay/ |
Les fichiers Unity que je génère, à recopier sur le projet une fois créé par Hub. Voir son README |
tools/ |
Générateur du repère de calibration (make_calibration_glb.py) |
unity/ |
Le projet Unity lui-même — l'APK unique, tous clients |
viewer/ |
Le viewer et l'éditeur de scène web (étape S3), autonome. Voir son README |
Où vit le reste
- Décisions déjà arrêtées sur le canal VR (pricing, moteur, types de section, POI sur GLB) :
../DOCS/v2/vr-quest-unity-plan.md - Infrastructure dont ce module dépend (crédits, jobs, fournisseurs IA, personnages) :
../DOCS/v2/studio-plan.md - Kanban :
../DOCS/kanban/cards/5-planifie/320-*et330-*
Statut
S0 terminé. S1 quasiment bouclé — 11/09/2026. Le projet Unity existe (unity/MyInfoMateVR/,
Unity 6000.0.83f1, URP, Meta XR SDK 205), l'APK se construit, s'installe et tourne sur un Quest 2
en Horizon OS v207.
| Critère S1 | État |
|---|---|
| 1. Le monde s'affiche, on tourne la tête dedans | ✅ |
| 2. Le marqueur par coordonnées coïncide avec le repère du GLB | ✅ aucun miroir — GltfSpace.Axis = NegateX confirmé |
| 3. Personnage debout, à la bonne taille, animé, qui regarde le visiteur | ✅ |
| 4. Cercle de navigation infranchissable | ❌ on franchit toujours le cercle — mesure tête/rig corrigée, contrainte toujours sans effet. Non bloquant pour S2, à reprendre |
Les nombres que S1 devait produire
Mesurés sur Sponza (50 Mo, glTF multi-fichiers), pas sur un monde Marble :
| Mesure | Valeur |
|---|---|
| Chargement du décor | 1,4 à 1,8 s — l'écran de progression est un détail, pas un sujet |
| Chargement du repère / du personnage | 33-248 ms / 54-96 ms |
| Images par seconde | 72/72 tenues, mais App=12,4 ms sur 13,9 disponibles et GPU au niveau maximum |
| Poids réel d'un monde Marble | ❌ toujours inconnu — crédits Marble insuffisants |
➡️ Lecture : un décor de 50 Mo bien texturé sature déjà un Quest 2. Le budget de scène devra être défini, et la question KTX2 côté serveur reste ouverte tant que le poids d'un vrai monde Marble n'est pas connu.
Les assets de test sont des GLB libres (Khronos glTF Sample Assets : Sponza, CesiumMan) déposés
dans StreamingAssets/ — non commités, jetables, et sans valeur pour la mesure de poids.
Les pièges rencontrés et leurs corrections sont consignés dans unity-overlay/README.md.
S2 — validé le 11/09/2026
| Livrable S2 | État |
|---|---|
La scène est construite depuis scene.json, plus depuis du code |
✅ |
| Modifier le JSON et relancer sans recompiler déplace l'objet | ✅ manifeste poussé par adb push, lu en priorité sur celui de l'APK |
Un world.kind non supporté affiche une phrase lisible, pas une scène vide |
✅ testé avec "kind": "panorama" |
| Un hotspot apparaît et joue son audio au raycast | ⏳ le scene.json d'exemple n'a pas d'audio |
Le manifeste se pousse ainsi, l'app le préfère à celui embarqué :
adb push scene.json /sdcard/Android/data/com.unov.myinfomatevr/files/scene.json
Prochaine étape : S3 de 04-phase3-plan.md — le viewer web et son éditeur. C'est le jalon « démo vendable », et le plan y place un go/no-go explicite.