A narrative VR experience built in Unity, loosely inspired by Inception. The player moves through four dreamlike scenes, each with its own mood, mechanics, and ending that loads the next.
Status: personal portfolio project. Built solo as a VR experiment. Not a finished product.
| # | Name | Idea |
|---|---|---|
| 1 | Garage | Opening scene. Sit, interact with props, trigger the injection that starts the dream. |
| 2 | Ocean | Driving sequence across a bridge over an endless ocean. |
| 3 | Weightless | Floating/zero-g corridor with an elevator. Trigger-driven movement and teleport gates. |
| 4 | Limbo | Final open environment. Outro. |
Scene transitions run through a fade + async loader (SceneLoader.cs) with a persistent XR rig respawn (SpawnXRI.cs).
- Engine: Unity 2022.3.62f3c1 (LTS)
- XR: Unity XR Interaction Toolkit 2.6.5, OpenXR 1.14.3
- Target: desktop PCVR / Meta Quest via Link
- Rendering: Built-in pipeline
Assets/
├── Script/ # Global scripts (scene loading, fades, XR spawn)
├── Scene1_Garage/
│ └── Scripts/ # Garage-specific interactions (sit, grab, inject, UI toasts)
├── Scene2_Ocean/
│ └── Scripts/ # Vehicle + door controllers, IK, ocean
├── Scene3_Weightless/
│ ├── Scripts/ # Float/teleport/trigger logic, NPC speak, outliner
│ └── Elevator/Scripts/ # XR button + door open
├── Scene4_Limbo/ # (rotate.cs + environment)
├── Scenes/ # .unity scene files
├── Animation/ Audio/ Gizmos/ # Shared resources
├── NPC_Pack/ Oculus Hands/
├── H&L Assets/ Samples/ # Third-party packs (see THIRDPARTY.md)
├── TextMesh Pro/
└── XR/ XRI/
All C# under Assets/Script/ and Assets/Scene*_*/Scripts/ was written by me. Highlights:
Script/SceneLoader.cs— async scene load with fade + loading UI + XR rig stabilisation.Script/SpawnXRI.cs— repositions the XR rig to a tagged spawn point after each load, handling CharacterController/Rigidbody gotchas.Script/Fade.cs,LevelManager.cs,DontDestroy.cs,LoadingTMPGroup.cs— supporting pieces for the transition flow.Scene1_Garage/Scripts/— sit-down anchor, grab tracking, injection-on-touch, UI toast, next-scene trigger.Scene2_Ocean/Scripts/— van/car movement, door interaction, ocean controller, NPC IK.Scene3_Weightless/Scripts/— float-to-target, teleport gates, speak-on-trigger, outliner.Scene3_Weightless/Elevator/Scripts/— XR elevator button + door open logic.
- Install Unity 2022.3.62f3c1 via Unity Hub.
- Clone this repo and open the folder as a Unity project.
- Two large third-party
.fbxfiles are excluded from the repo (see THIRDPARTY.md for where to download them). Drop them intoAssets/Scene2_Ocean/before opening Scene 2. - Plug in a Quest (Link/Air Link) or any OpenXR headset and press Play.
This project uses a number of downloaded asset packs (characters, vehicles, environments, skyboxes). They belong to their respective authors — see THIRDPARTY.md for the full list. Nothing in those folders is my own work.
Code I wrote (the .cs files described above) is released under the MIT License.
Third-party assets retain their original licenses.