Full playthrough · final build on a Meta Quest 3 · me playing in the corner

Generate Your Story

Posted September 9, 2026

The player is a salvage pilot, and the player character doesn’t have a fixed name. You type a call sign on the start screen and it shows up below as {PlayerName}. The ship AI is ECHO.

It’s dead quiet the whole time, just the hum of the station and ECHO talking, until the Lab, where that breaks. Pick a stop on the station:

Start Screen

Custom UI Interaction

Station logo, a text field for your call sign, and a Begin button.

Opening: The Jump

Cinematic

A short cinematic before you step aboard. Your ship makes a jump to the station.

ECHODeparting, {PlayerName}. Punching the jump drive in three.
ECHOJump complete. Bringing us in to dock.
ECHOAnything glowing gold is something you can interact with. Point your controller at it and pull the trigger.

Docking Bay

Hover / Select / Activate

cratescargo sledtwo space suit mannequinsairlock door

Airlock Door: glows on hover. Selecting it starts ECHO's briefing, and the door opens when it's done.

ECHODocking clamps engaged. Life support's still running in there, {PlayerName}. Lights, gravity, air, all of it. Somebody left the lights on for six months.
{PlayerName}Great. More parts for us, then.

Corridor

Flavor, no interaction

repeated wall/floor piecesstrip lighting

ECHONothing broken back here. Nothing burned either. It's like the whole place just stopped.

Control Room

Information Panel

console / terminalchairwall monitorbunk bed

Terminal: ECHO's first line is about the power, and its second is about the crew.

ECHOTerminal's still got power. Might be worth a look before you start pulling wiring.
ECHOCrew roster says five people, {PlayerName}. The station's activity log, every entry, every day, automatic, stops dead on the same day, for all five. Not staggered. Not partial. Same day. That's not what a normal evacuation looks like.

Then a written journal entry the crew left comes up, different from the automated log ECHO mentioned.

JOURNAL, DAY 180"Resonance from the artifact is climbing again. Director wants to run a full-power test tomorrow. I've logged my objection."
{PlayerName}Well, that's not ominous at all.

Lab

Hover Enter/Exit · Select/Activate + Changing Material

deskhandheld recorderartifact on a pedestal

ECHOThis is the room the journal entry meant.

Recorder: scales up and lights up when you hover it, back to normal when you don't. Select it and it plays the last thing it ever recorded: static, one ragged breath, nothing. No Day 181 entry, because there was nobody left to make one.

Artifact: select it and its material shifts from dim blue to bright white. The room starts to shake and the lights go red as an alarm sounds. Then the room is gone and you're floating in open space among spinning stars. All you can hear is breathing. After a few seconds everything snaps back, the artifact dark and the lab quiet again.

ECHO{PlayerName}. Whatever that was, it's done now. Don't touch it again.
{PlayerName}Wasn't planning on it.

End Screen

Restart

MISSION LOG"You sealed the lab and logged the coordinates for recovery. Whatever happened to the crew, it's not your problem to solve today."

Button: Restart, which reloads the run from the opening.

World & Interaction Map

Room 3D Elements Interaction Type
Start Screen UI panel Name entry Custom UI
Docking Bay Crates, cargo sled, suits, airlock door Open door Select/Activate
Corridor Wall/floor pieces, lighting — —
Control Room Console/terminal, chair, monitor, bunk View journal entry Information Panel
Lab Desk, recorder, artifact pedestal Hover recorder Hover Enter/Exit
Lab (same room) Activate artifact Select/Activate + Material
End Screen UI panel — —

Build the 3D World

September 11, 2026

Room by room, following the World & Interaction Map above:

Lighting’s dim everywhere, practical-fixture style, to match the whole dead-station thing, with decay decals scattered around. Only the Lab light actually needs to flicker, which gets scripted in Assignment 3. Skybox is a starfield I generated (not a stock HDRI) with three actual 3D ringed planets, real geometry and not a texture, placed so each window looks out on one.

Screenshots

Video Walkthrough

Asset List

Source Assets Used For
Kenney “Space Kit” Barrels, barrel rail cart, gate frame, computer console, computer screen/monitor, window frame, satellite dish Docking Bay, Corridor, Control Room
Kenney “Furniture Kit” Desk, chair, two bookcases, bunk bed Control Room, Lab
Built from primitives Room shells and paneled surface textures, airlock door panel + glass, artifact (emissive material, no shader), recorder prop, strip lights, space suit mannequins, decay decals, wall posters, chalkboard, paper pile, and a procedural starfield skybox with 3 real 3D ringed planets All rooms
Freesound.org (CC0) Breathing loop, ECHO beeps/stings, screech/howl one-shot Ambient audio + artifact trigger (wired up in Assignment 3)

Add Interactions

Posted September 21, 2026 · Updated October 5, 2026

The build now runs on a real Meta Quest headset, not just in the Editor. Everything below reflects the current version. Full source and commit history are in the GitHub repo.

The Run

Six interactions have to happen in order, and each one only responds on its turn:

  1. Airlock door
  2. Corridor door
  3. Terminal
  4. Lab door
  5. Recorder
  6. Artifact

A small objective HUD tells you what to do next, and every interactable shows a floating hint (“PULL TRIGGER”, “GRAB, THEN MOVE IN A CIRCLE”) when you point at it. Out-of-order objects don’t react at all, so there’s no way to get stuck.

Five Points of Interaction

Covering the assignment’s required interaction types, on top of the rooms from the World & Interaction Map:

1. Start Screen: Custom UI Interaction

Station logo, call sign field, Begin button. Whatever you type becomes {PlayerName} for the rest of the run. Quest’s system keyboard doesn’t work inside a fully immersive app, so I built an in-scene QWERTY keyboard (letters, space, delete) out of ordinary UI buttons. You type by pointing a controller ray at keys and pulling the trigger, same as pressing Begin.

2. Airlock, Corridor & Lab Doors: XR Simple Interactables, Hover / Select / Activate

Each vault door glows on hover and opens on select. In VR the real control is the wheel handle: grab it and move your hand in a circle. The custom TwistHandle.cs tracks the hand’s angle around the wheel’s axis, and each wheel is tied to its own step so it only turns when it’s that door’s turn.

3. Recorder: 3D Object Hover Enter/Exit State

Scales up and lights up on hover, drops back down when you look away. Straight GameObject-level hover, no UI involved. Select it and it plays back its last recording: static, one ragged breath, nothing.

4. Terminal: Information Panel (UI Canvas Element)

Selecting the console pulls up a panel with the crew’s last journal entry, closing itself after the final line.

5. Artifact: Select/Activate + Changing Materials/Background

Selecting it shifts the material from dim blue to bright white. Then the room shakes and the lights flicker red while an alarm siren builds. The room cuts out and you’re floating in open space among spinning stars with only your own breathing to listen to. After about twelve seconds everything snaps back to normal and ECHO closes out the story. I tried crew silhouettes in this moment and cut them. The simple version is creepier.

The Start Screen and End Screen from Assignment 1 bookend the run. The End Screen has a single Restart button that takes you back to the opening sequence.

What Changed After Headset Testing

Testing on a real Quest turned up problems the Editor never showed:

I also added a desktop point-and-click mode for testing in the Editor. Real Quest builds always use VR.

Asset & Package Notes

Source Used For
XR Interaction Toolkit 3.6.0 (XRSimpleInteractable, select/hover events) Terminal, recorder, artifact, doors, door wheels
Custom scripts (TwistHandle, InteractionSequencer, OnScreenKeyboard, WorldSpaceUIFollow, ObjectiveHUD) Wheel grab rotation, step ordering, VR typing, VR-safe UI, objective HUD
“Star Sparrow Modular Spaceship” by Ebal Studios Ship in the opening cinematic
Freesound.org (CC0) + “Voices Sound Effect Library” by Little Robot Sound Factory (CC-BY 3.0) Ambient loops, ECHO stings, recorder breath
Locally-synthesized audio (ffmpeg) Bass rumble, glitch stingers, alarm siren

Full attribution is in Assets/CREDITS.txt in the repo.

Final Project: Day 181 v2

Posted November 11, 2026

For the final I went back to Day 181 instead of starting something new. The version above worked on the headset, but it was short and the mystery never went anywhere: one clue, one reveal, the same ending every time. v2 is the same station made longer, darker and stranger, with a story you can actually piece together and a choice at the end.

Status: v2 has been through two playthroughs on the Quest, and the fixes from the second one are built but not yet replayed in the headset. The video at the top of this page is still v1; a new headset walkthrough will replace it once the latest build has been tested. Source is in the GitHub repo; the original is tagged v1-final.

Before and After

  v1 (Assignments 1 to 3) v2 (Final)
Rooms 4 6, adding Crew Quarters and Engineering
Required steps 6 10
Kinds of hand interaction 2 (point and trigger, twist a wheel) 6 (adds slide a hatch, carry a power cell, pull a lever, hold a dial to scan)
Optional things to find none 5 crew logs, one from each crew member
Endings 1 3
Lighting one fixed look 4 states: emergency power, full power, blackout, lab only
Surfaces one flat 256 px grid texture on everything 1024 px wall, floor and ceiling panels with depth, plus trim, beams and a coloured light strip in every room
Story beats that need a click all of them dialogue still clicks; PA, radio voices, whispers and hints are captions that fade on their own

The New Story

You are still a salvage pilot and ECHO is still your ship’s AI. What changed is that ECHO now has an agenda, and the station has a past you can read.

The station went silent 181 days ago. It is on emergency power when you dock because someone pulled the reactor cell. ECHO walks you through putting it back. The moment the lights come up, the station’s PA picks up exactly where it stopped: “Resuming scheduled operation. Day one eight one. Full-power test: standing by.” ECHO tells you to ignore it.

Five crew logs are scattered through the rooms, glowing blue instead of gold. They are optional, and ECHO says not to bother. Read together they say what ECHO won’t:

VEGA, PILOT. MISSION DAY 176"Both shuttles are still clamped and they're staying that way. The Director has grounded every departure until after the test."
PARK, MEDIC. MISSION DAY 178"All five of us are reporting the same dream. Standing in the dark, stars turning, someone breathing right beside you."
DR. ELLIS, PHYSICIST. MISSION DAY 179"It isn't emitting. It's replying. Every pulse we send comes back changed, with our own voices folded into it."
COLE, ENGINEER. MISSION DAY 180"I pulled the reactor cell and hid it on the rack with the dead ones. No cell, no test. If you're reading this and the lights are on, somebody put it back."
DIRECTOR MARSH. MISSION DAY 181"It asked for all of us and we came. We are not gone. We are kept."

So nobody evacuated, the dream is the float sequence from v1, and the person who put the cell back is you. ECHO has a calm explanation for everything (“thermal contraction”, “old recordings”, “equipment noise”), and each one is contradicted by something you read or just heard.

The Run, v2

  1. Airlock door. Twist the wheel.
  2. Corridor door. Twist the wheel. The control room behind it is dead.
  3. Engineering hatch. Grab the handle and drag the hatch sideways along its rail.
  4. Power cell. Take the one live cell off the rack and carry it across the room to the reactor socket.
  5. Main bus breaker. Grab the lever and pull it down. Power returns, the PA speaks, and a door opens somewhere behind you.
  6. Terminal. Crew roster, the Day 180 journal, and where the lab’s lock is controlled from.
  7. Radio panel in Crew Quarters, which holds the lab door’s remote lock. Point at the dial and hold the trigger. It scans by itself, stops on a signal with voices in it, then finds the door and unlocks the lab.
  8. Lab door. The lights have just died. You walk back through the corridor and control room by suit lamp.
  9. Recorder. One ragged breath.
  10. The choice. Touch the artifact, or pull the containment seal by the lab door.

Three Endings

The end screen shows how many crew logs you recovered, which is the reason to play it again.

Four New Interactions

All four use the mechanism the door wheels already proved on the headset: an XR Simple Interactable that stays selected while you hold the trigger, with the script reading where your hand is each frame. They share one base script, HoldInteractable.cs, which handles the gold glow, the floating hints, haptic ticks and the step order.

Crew logs are plain point-and-trigger, on their own script (CrewLog.cs), outside the required sequence.

Making It Scarier Without Showing Anything

I kept the rule from Assignment 3: no monsters, no crew silhouettes.

Nothing moves the camera or takes control away, and every loud moment has a quiet lead-in.

Making It Look Like a Station

My first pass at v2 was all mechanics and story, and when I opened the scene it still looked like v1: gray boxes with one small grid texture stretched over everything. So the second pass was only about looks.

Easier to Play

Bugs I Found in v1 While Auditing It

What Changed After Headset Testing (v2)

Same lesson as Assignment 3: the Editor lies. Two playthroughs on the Quest found things I never saw on the desktop.

Still To Do

v2 Assets and Credits

Source Used For
Unity primitives, placed by an editor script (V2Builder.cs) Crew Quarters, Engineering, reactor, breaker, radio panel, datapads, containment seal
Meshes generated by the same script The artifact crystal and its rings
Textures generated for this project (Python, NumPy and Pillow) Wall, floor and ceiling panel sets, hazard stripes, the three wall displays
Kenney “Space Kit” and “Furniture Kit” (CC0) Barrels, machine, bunks, desk and shelf in the new rooms, reused from v1 so the look stays consistent
Sound effects synthesized for this project (Python and NumPy) Lever, power surge and power down, reactor hum, hatch, metal clang, door creak, radio static, lock release
macOS text-to-speech (“Samantha”, “Whisper”), filtered Station PA, voices on the radio, whispers
“Voices Sound Effect Library” by Little Robot Sound Factory, www.littlerobotsoundfactory.com (CC-BY 3.0) Recorder breath, carried over from v1
XR Interaction Toolkit 3.6.0 Starter Assets XR rig, tunneling vignette

Full attribution, including what is still unverified from Assignment 3, is in Assets/CREDITS.txt in the repo. I built v2 with Claude Code driving the Unity Editor; the audit it wrote before changing anything is in the repo as AUDIT.md.