Expérience en réalité virtuelle développée sur Unreal 5.5
2025
Langage :
Blueprint
Rôles :
Lead programmation
Participation Game design / User Experience
Durée :
Projet sur 5 semaines
Equipe :
Equipe de 9 personnes
Concept :
Vertigo est une expérience VR mêlant contemplation,
énigmes légères et sensations de vertige.
Le joueur commence dans une reconstitution de la salle
307, puis explore plusieurs pièces, chacune proposant
une épreuve liée au vertige.
Entre chaque énigme, il traverse des espaces mettant
en valeur les filières de l’école (Game, Animation, DA),
avec des galeries immersives présentant des travaux
étudiants.
Pensée pour être intuitive et accessible, l’expérience
dure environ 10 minutes et mise sur un fort impact
visuel et sensoriel.
Gestion de scène :
Nos besoins
Dans Vertigo, l’expérience repose sur une succession de salles en réalité
virtuelle.
Nous devions enchaîner plusieurs scènes dans un ordre précis, tout en
respectant plusieurs contraintes clés liées à la VR :

La réponse, un système modulaire et scalable
Pour répondre à ces besoins, j’ai mis en place une architecture de gestion de scènes basée sur le level streaming dans Unreal Engine 5.5, combinée à une logique de transition orchestrée dans le Level Blueprint principal.

Gestion centralisée des transitions avec un blueprint customisé.
Celui ci comprend une fonction LoadScene avec des règles de chargement (LoadOnly, UnloadThenLoad, LoadThenUnload, OnlyUnload...) avec un
choix du niveau à charger ou à décharger très simple d’utilisation.

Les scènes sont répertoriées dans un Enum E_Scene, ce qui permet d’ajouter, charger et décharger dynamiquement n’importe quel niveau.
Et en jeu
À la fin de chaque salle, une chaîne suspendue apparaît devant le joueur. En la tirant, il déclenche un effet visuel, la lumière semble s'éteindre.
C'est en fait un simple fondu au noir.
Le niveau actuel est déchargé proprement, puis le niveau suivant est chargé dynamiquement .
Une fois le nouveau niveau prêt, un fondu inverse réactive la lumière,
pour replonger le joueur naturellement dans l’expérience.

Résultat : Un système fluide, invisible pour le joueur, qui enchaîne les salles sans rupture et conserve l’immersion VR.
Coté Gameplay :
Template VR Unreal
J’ai choisi de partir sur le template VR d’Unreal Engine, qui ore une base solide (tracking des mains, interaction physique, gestion du casque, etc.).
Cela m’a permis de gagner du temps tout en assurant une intégration stable et performante.
J’ai tout de même apportés quelques modifications :
Énigme 1 – Reconstitution de la salle
Pour cette première énigme, nous voulions une séquence marquante mêlant vertige, observation et interaction directe : le joueur se retrouve isolé sur une plateforme suspendue au-dessus du vide, avec une salle fragmentée en morceaux autour de lui.
Son objectif : Reconstituer progressivement la salle en plaçant correctement des pièces de puzzle physiques sur un plateau central.

L’énigme repose sur une architecture simple mais e²cace, articulée autour de trois Blueprints principaux :
BP_PuzzleManager :
Orchestration de l’énigme : logique centrale, état des pièces, déclenchement de fin.
BP_Puzzle :
Plateau interactif : détection de la position et validation de la pose.
BP_PuzzlePiece :
Pièce manipulable : saisissable, indexée, et animée au placement.

Dès que toutes les pièces sont bien positionnées et que la salle est entièrement reconstituée, un signal OnEnigmeEnd est envoyé par le BP_PuzzleManager.
Ce signal déclenche l’apparition de la chaîne suspendue, signature de l’expérience, que le joueur peut attraper pour lancer la transition vers la salle suivante.

Énigme 2 – Système de tour rotative
Pour cette seconde énigme, j’ai conçu un système basé sur une tour verticale de 8 étages rotatifs que le joueur doit réaligner manuellement.
Chaque étage est un Blueprint autonome (BP_FloorRotator) attaché à un pivot central.
Le joueur utilise une console physique interactive composée de deux boutons de naviguer entre les étages (index) ainsi qu’un bouton de validation pour appliquer une rotation à 90° sur l’étage sélectionné.
Une échelle visuelle (BP_EchelleFeedback) se met à jour en temps réel pour refléter l’étage actif via un système de Material Instances.

La console principale (BP_ConsoleFloorRotator) centralise la logique :
Elle gère l’index courant, envoie le signal de rotation au bon étage via un array de BP_FloorRotation référencé & applique des verrous d’interaction pour éviter les doublons en cas de multiple appuie sur les bouttons.

Énigme 3 – Simulation par maquette interactive
Cette énigme repose sur un concept physique original : une maquette saisissable agit comme contrôleur direct de la salle réelle, que le joueur doit incliner pour en faire tomber les objets et atteindre un score cible.
La salle suit dynamiquement la rotation de la maquette, avec un système fluide de suivi interpolé (BP_DuplicateRotation), déclenché dès la saisie.
Tous les objets présents dans la salle héritent d’un BP_ ActorBasePoints, Blueprint parent
générique :
Un AC_PointGiver (ActorComponent) attaché permet de configurer le score de chaque objet de manière indépendante.
Seul le StaticMesh change d’un objet à l’autre (enceintes, néons,chaises, etc.), assurant un design modulaire et extensible.
Le BP_PointsManager gère les collisions derière la sortie : chaque objet tombé est détecté, validé et incrémente le score du joueur.



Dynamique & immersion :
L’état d'avancé est constamment lisible :
Le score est affiché en temps réel via une progress bar.
Une animation tutorielle explique l’objectif via une télévision au début de la salle, à travers un défilement d’images successives.

Certains objets suspendus (enceintes, néons...) ne tombent pas immédiatement, mais se décrochent aléatoirement après un délai suite à l’interaction avec la maquette.
Cela crée des événements imprévisibles, ce qui renforce l’immersion.
Une fois l’objectif atteint, le signal de fin est automatiquement envoyé et l’accès à la salle suivante est libéré.

Salle Don’t Push
Une fausse sortie... ou presque.
Après l’énigme 3, le joueur quitte la salle via une chaîne suspendue, seretrouve dans la salle 307 avec toujours cette même chaine...
Mais un bouton rouge attire l’œil... et la curiosité.
Lors de l’appui, une série d’événements se déclenchent :
Signal d’alarme retentit


Mot de la fin :
Vertigo a marqué une étape dans ma progression en tant que
développeur gameplay, et mon tout premier réél projet VR.
J’y ai découvert les exigences spécifiques à la réalité virtuelle : lisibilité,
confort, optimisation… et appris à adapter mes systèmes à ce
type de production immersive.
C’était aussi la première fois que je travaillais aux côtés d’un autre
développeur. On a construit ensemble des fondations techniques solides,
en échangeant beaucoup sur la structure, les besoins, les priorités.
Ce que je présente ici dans ce portfolio se concentre exclusivement sur
mes réalisations personnelles au sein du projet :
architecture modulaire des énigmes, gestion du streaming, interactions
physiques, feedbacks, logique de progression...
Et puis parfois, il faut aussi savoir ajouter un faux bouton rouge, trois
explosions , une alarme stridente… et une chute dramatique.
