Dates: Jun. 19' - Jul. 19' (2 months)
Team Size: 10
Platform: PC, Oculus Rift/Quest (VR)
Tools: Unity3D, Unity Collab
Role: Lead Programmer & Unity Developer
Programmed VR interactions.
- 24Hr event scheduling system.
- Coded tools to aid development.
- Managed 6 other programmers.
A virtual reality prison simulation designed to train Correctional Officers. For two months, I was the lead programmer, overseeing the progress of 6 other developers. I worked closely with the project designer, delegated responsibilities, and helped to resolve any issues.
I created the player controller, which took inputs from Oculus Touch controllers. It enabled the player to move around and interact with the virtual environment. It also prevented them from looking through walls, pausing through rooms, and other behavior is challenging to overcome with VR.
24Hr Event Scheduling System
The goal of the simulation was to allow the player to be able to experience a full day in a prison environment. I developed a system that kept track of the current time in the simulation and executed events throughout the day. The player could also fast-forward time to get through events faster. Designers had the ability to create events to trigger inmate behavior and what options are available to the player. This system was a critical to the training aspect of the simulation.
Extended AI System to Aid Development
I extended our AI system to allow the AI to roam designated areas freely. Defining an area to roam involved adding a prefab to the scene, expanding the area to roam, and telling the AI to roam in that area. The random movement around an area made the AI appear less scripted and more lively.
Developed Editor Tools
The prison was originally designed to have 96 cells for inmates. Adding a number to a single cell was a slow process, requiring the model of each digit to be dragged in, parented, and positioned manually. I simplified the process by making a Unity Editor script. After entering the cell number in a text field, it would add and position models automatically. What originally took minutes for one cell, now takes a few seconds.
Fully Interactable Solitary Confinement
We made the entire prison accessible for the player to walk around at any time. An area I primarily worked on is solitary confinement. I boxed out the area, scripted 16 simulated hours of events, and added interactable objects such as cell doors and a food cart during mealtime.
From the start of the project, the simulation was designed for the Oculus Quest. Since the platform had a limited amount of memory, I came up with a way to handle the asynchronous loading and unloading of different areas of the prison at runtime. This greatly reduced memory consumption and increased frame rate while running on the device.
Many times, we needed to open up the command line to install and uninstall from the Oculus Quest, due to a limitation with Unity. This process requires several commands and someone who is comfortable with the command line. I simplified the process by creating an application to install or uninstall the project with the click of a button.
What I've Learned
Working with Unity, the Oculus Quest, and being the lead programmer, I gained a lot of valuable experience from this project. I worked with a fantastic team that supported this project, months after the class was over. The project was going to be part of the student competition at I/ITSEC 2019 in Orlando. Unfortunately, due to a last-minute bug after an Oculus update, it didn't pass the initial round of the competition.