Rube Goldberg VR: A highly immersive video game made with SteamVR

tinotheeb
5 min readFeb 27, 2019

--

Photo by NeONBRAND on Unsplash

INTRODUCTION

Rube Goldberg VR is a video game that is designed for Oculus Rift users. The goal of the game is to use a limited amount of Goldberg Objects (each with it’s own unique abilities) to collect stars with a ball without touching the floor! Upon completion, the player is taken to more challenging levels. There are four levels in total, each with different combination of Goldberg Objects and incrementing number of stars!

OUTCOME

The final result of this game was fun to experience for other users. I made sure that they were in the mindset of solving puzzles from the moment they launched the game thanks to some heavy metal music as an introduction. The controls were easy to understand through the multiple UIs displayed at the start of the game, the levels were challenging but not too difficult; it was super fun all in all!

PROCESS

SteamVR Set Up

For starters, I had to download the new SteamVR plugin. You can find it here in the asset store. I followed a couple of tutorials on Teleporting and Throwing.

Once I got the hang of it, I set up a teleportation to most of the map. This insured that the user never fell off bounds and gave them the chance to explore should they choose not to play the game right away.

Teleporting around

Make Objects Interactive

Following the SteamVR tutorial on Throwing, I set up most Objects for throwing. This was easy to do for the Ball, but for the Goldberg Objects they weren’t supposed to have a velocity. So I kept them as “Interactable” but turned on their Kinematic bodies. This way the user can place them anywhere to complete their challenges!

Throwing the Ball + Moving a Trampoline

Implement Game Mechanics

Next up was to implement the logic for all the objects involved.

Ball:
First, I made the ball reset back to it’s original position if it collides with the floor. Then, I made it collide with Star collectibles and the Goal.
If the ball collects all the Stars and collides with the Goal, then the game is transferred to the next level. Finally, if player is off bounds, I turned off it’s ability to collide with Stars. This insured that the player never cheated!

(L/R): Ball reset in action / Anti-cheat design

Trampoline:
For the trampoline, it simply adds force to the Y-axis of the Ball from the Vector3.Forward (Z-axis) of itself. This way, the Ball will bounce according to how the Trampoline is rotated, which gives the player unlimited possibilities of bouncing at any angle!

(L/R): Trampoline design / Celebrating the Trampoline bounce working

Teleport Blocks:
The Teleport Blocks work hand-in-hand with each other. Think Portal but with objects that can be attached anywhere! If you throw a Ball in one block, it will emerge from the other block (given that the user already spawned it). Like the Trampoline, the Teleport Blocks adds force to the Ball along it’s Z-axis, which allows the player to propel the ball at any angle they choose!

(L/R): Teleport design / Teleport blocks testing

The other Objects are simple planks (Wood & Metal) that simply roll the ball along. The Metal has edges on the sides that support the moving ball while the Wooden plank has no edges.

Goldberg Object Menu:
Finally, after arranging all the Objects together, I want the user to cycle through these objects using their Right Controller. Upon touching the Right Thumbstick, the menu shows. The user can cycle through these objects left and right on the Thumbstick. Finally, pressing the right grip button will spawn the desired object! Each object has a limit on how much can be spawned.

Object Menu + Spawning an Object + Using the Object

Level Design

After finishing the objects, I proceeded with the funnest part: designing the levels! Each level increases in difficulty, with the star collectibles and the available Goldberg Objects increasing as well!

(L/R): Multiple failed attempts at a level / Successful attempt at a level

Final Polishing

For polishing, I added a Main Menu introduction and UIs to help guide the user should they require information on playing the game. Finally, I added sounds to aid the users in their actions! To see all of this, kindly watch the video below.

(L/R): Main Menu UI / First Level UI

FINAL BUILD

CONCLUSION

I had a lot of fun developing this game. The most challenging yet funnest part was learning the SteamVR plugin. It was completely new and packed with information but the end results were worth it. I guess you can say I like a challenge! If I had more time in the future, I would’ve definitely developed this game using my own assets. Looking forward to the final project in Udacity’s High Immersion program!

Me thinking about my next VR project

--

--