Aaron Petrek
Game Developer
Summary
Single-Player VR puzzle escape game developed using Unreal Engine 4, C++. Dungeon Escape VR was a solo project originally created as a non-VR game. I converted the game to VR adding the gameplay mechanics for a VR experience. This game uses SteamVR.
Project Specifications
-
Single player VR
-
Developed in UE 4.25
-
C++
Project Goals
-
Learn about VR development in UE
-
Learn about VR gameplay mechanics
Game Summary
Trapped in the darkness of a dungeon's depths, your challenge is to find an escape route. Throughout the labyrinth, statues act as keys to open and close cell doors. By deciphering the correct combinations, navigate through the dungeon to open each cell door. Open the last cell door to grant your freedom from the dungeon's grasp.
Game
Dungeon Escape VR originally was part of a tutorial I completed when first learning Unreal Engine. The original project can be found on itch.io here, Dungeon Escape. When I started with VR development I decided to take the existing game, which was not VR and create a VR version. My goal was to learn about the design and gameplay implementations that differ from a flat screen 3D game. This simple game seemed like the perfect fit.
The objective of the game is the same as the original, escape from a medieval dungeon. In the dungeon there are cell doors, statues that act as keys, and triggers for opening the cell doors. The player must place the keys on the triggers in the correct combinations, opening the cell doors to escape from the dungeon. The level design is shown below.
Project Reflection
Dungeon Escape VR taught me a lot about the complexities that arise while developing a VR game. I found that ensuring an enjoyable player experience in VR requires extra thought compared to non-VR games. I learned there is a fine balance between making the player feel immersed in the game environment and maintaining their comfort level. In addition to player experience, I also found that optimization is vital for VR games for maintaining the player's HMD refresh rate. For this project I followed the Unreal virtual reality best practices.
Player Locomotion
Dungeon Escape VR is meant to be played in room scale VR, however the size of dungeon map is much larger than the player's physical space. Like many other VR titles this games uses a teleporting mechanic to move the player's physical space through the game space. The teleport location is determined from where a prediction projectile path intersects with the level navigation mesh. To show the projected path, spline mesh components are placed between the data points returned from the prediction path. The spline mesh components themselves are stored in an object pool. New spline mesh components are only created every time a teleport prediction path is longer than any previous predicted path.
Development
Dungeon Escape VR started from a tutorial that covered programming a player pawn and cell door gameplay mechanic. The main change required to convert this game to VR was creating a VR pawn for the player.
Interactable Actor Identification
For better immersion in VR, the player can interact with objects in the world. Actors derived from an Interactable Actor class are able to be picked up by the player. The statue’s Blueprint class, for example, is derived from this Interactable Actor class. To highlight the objects that are important to the player, I created a material that highlights the Interactable Actors Static Mesh Component, which informs the player the object can be picked up.
Player's Visual Blockout
In this game design it is important that the player does not have access to keys in rooms that are inaccessible while their cell doors are closed. Therefore I needed blocking collisions to prevent the player's Pawn from moving through the walls and into these rooms. This posed a problem as stopping the Pawn’s movement in VR while the player continued to move caused motion sickness. I added camera functionality to block out the player's view into the gameworld when the player's Pawn movement is impeded by a blocking collision. This smoothly fades the player’s vision to a solid color when approaching a blocking collision and smoothly fades out when the player moves away from the blocking collision.