An interactive VR experience

Creative Director / Engineer


Variable Color Coding: Boolean   Integer   Float   Vector


In SC02: Cubic Tunnels, the player will find the cubic puzzle. The player can touch the levers to rotate the cubes in order to solve the puzzle. The lights will switch on when a cube is in the correct orientation.

The order of the cubic puzzle is determined by the order of environments that the player has passed.


After playtesting about 10 players, some players were confused about which row they should align the colors to. 

Solution 1:

Light up the bottom row to make it clear that the colors should be aligned to the bottom row.

Solution 2:

Desaturate the side and top row.



The player can scale certain objects in the experience. The scalable objects have a visual indicator (glowing shader). In the blueprint, I created two variables: Initial Distance and Initial Scale. I set the Initial Distance by subtracting the first hand world location to the second hand world location. After setting the Initial Distance, I set the Initial Scale by getting the world scale of the target static mesh. For every tick, the distance between the first and second hand is divided by the Initial Distance, and then multiplied by the Initial scale. The value is the new scale of the target object which increases and decreases with the distance between the left and right hand.



Hold left & right grip

Scale down - Move arms closer to each other

Scale up - Move arms further away from each other



In SC03 Aqua Jungle, the player has to capture a tuna in order to get directions from Loxa and Quama. 

The player must be in "Focus Mode" to capture the tuna.

Focus Mode is a special ability that the player can use to slow down the global time while maintaining the movement speed. Focus Mode lasts for 5 seconds. The player can easily approach the tuna by using "Focus Mode".


Press X


The random maze generator uses the recursive backtrack algorithm, which repeats itself until it's unable to complete a step in generating the maze. When finding a valid tile to add to the maze, the algorithm checks two tiles away to make sure the path is not completely blocked. When the current tile doesn't have any valid tiles to move, the algorithm starts to backtrack. The repetition of this process grows the path and eventually generates a random maze. 

The maze uses a grid to determine where the maze walls should be placed. In order to do so, the grid has to be numbered so that the boarder walls can be differentiated. 

Grid numbering equation: 

Top Row = l

Right Column = (ix) + (x-1)

Bottom Row = (x-1)x) + l

Left Column = ix

The maze also needs to know how to get the numbers of neighboring tiles so the walls can be placed accordingly

Neighboring grid number equation: 

North = c - 2x

East = c + 2

South = c + 2x

West = c - 2

Construction Script


Caustics Material

Caustics In-game view

Sign Light Material

Sign Light Material In-Game View



When a player collides with the trigger, the next level loads and the previous level unloads by using the FlipFlop node. This method maximizes the performance while enabling players to have a smooth experience without loading screens.