A Puzzle in VR

As part of Term 2 in Udacity’s Virtual Reality Developer Nanodegree, I created a game that showcases important VR design and process principles. In this Google Cardboard experience, users have to solve a puzzle with flashing orbs. The development process is documented below.

Final demo. Watch with a VR headset.
Game view inside the Unity editor.

Process

Designing a VR game or experience should start with the end in mind — as such, keeping your end users in mind from start to finish is paramount to releasing a successful product. Through frequent iteration and user testing, I kept a clear vision of what was working and what needed improvement.

Statement of Purpose

Puzzler is a mobile VR application for new VR users that challenges them to solve a familiar type of ‘match-the-dots’ puzzle in a new way.

Persona

A persona helps focus development by targeting a specific audience. Tian Bo is the persona I created for the Puzzler VR experience:

Persona: Tian Bo, 28 year old, automotive engineer
Motivations: Tian is a young professional who is settling into the rhythms of a post-college life and spends his time working on his project car — a dream he’s had since childhood. Tian is always on his phone, playing games or chatting with friends. He has seen a short 360 degree video in VR but hasn’t explored the more immersive 6-DOF headsets.
Quote: “I love tech that is intuitive and creative.”

Sketches

Drawing out the environment and different ways to portray the scene before entering the virtual world is a fast and effective prototyping method, as simple sketches using paper and pen are very helpful to get ideas flowing. The general idea was to portray a dungeon overlooked by mountains. Some sketches are shown below.

Sketch of the exterior.
Sketch of the interior.

Using the supplied prefabs, I created the dungeon in Unity. It was challenging positioning each each part of the building so that all the pieces touched with no gaps between them, but with a little finesse the dungeon took shape.

Outside the dungeon.

User Testing

Asking the right questions is essential in getting good answers during the user feedback phase. Open-ended questions that ask users to describe the environment or mood lead to actionable steps. Initial testing was focused around getting the scale of the experience to feel natural. Some feedback:

“I feel like I’m in a giant room!”
“I feel like I’m at an angle to the walls.”
“This feels mysterious.”
Getting the scale right.

After adjusting the scale so that the user’s position while playing felt natural and real, I moved on to adjusting game mechanics. At first, I was having trouble making the script realize that an orb had been selected. After inserting a debug statement in the playerSelection() method in the lightUp script, I realized that the event wasn’t triggering. Making sure each orb was linked to respond to a pointer click fixed the issue. Some more user feedback:

“So I have to select the orbs that light up.”
“Ok, that makes it a lot easier.” [after adding sound to the player selection]
“The welcome screen seems a little too close.”

Adding movement and the game orbs to the setting started making the game feel more compelling. Adding sound so that the user got feedback when selecting an orb was a small yet vital part of making the gameplay intuitive and easy to follow.

The initial game orbs.

After making the experience better with the feedback obtained from user testing, I did a final demo. Some comments:

“It certainly feels like a mysterious puzzle game.”
“I like how you glide forward from start to finish”

Final Project Breakdown

The Scene

The environment is dark and mysterious, with the main nighttime scene including a dungeon type of building encircled by mountains. The provided prefabs were used to create the setting in Unity.

Graphical User Interface

The user is presented with three ways to interact with the game — through the Welcome screen, the orbs, and through the Restart screen. Using audio and visual feedback helps the user keep track of where they are in the game and provides useful cues to maintain engagement.

Movement and Game Mechanics

As there’s no positional tracking in mobile VR, the developer must use rotational tracking and the gaze input to engage the user. Using a dash-forward Waypoint method to move through the game solves the absence of positional tracking in mobile VR. When the user proceeds to the gameplay section, the orbs light up in random order and a corresponding sound is played. Fixing the gaze over a game orb lights it up and audio feedback confirms when the orb has been selected. If the order is selected correctly, the user is moved forward to the end restart screen and given the option to play again.

Conclusion

Through this project, I learned how important iteration and user feedback are in developing a VR experience. Building the environment in Unity and making sure the game mechanics were working and fluid were fun challenges.

As a next step, I might add a countdown timer before the orbs initially light up so that the user knows something is going to happen and is prepared for the start of the puzzle.

Like what you read? Give James Issac a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.