QU IPE Escape Room
Worked in a team of three with one artist and another programmer to translate an in-person healthcare-focused escape room experience into a multiplayer game for students at Quinnipiac University. The game teaches about different roles and associated responsibilities in the medical field, as well as the importance of teamwork and collaboration. Developed in Unity using Unity’s Netcode for GameObjects for server-client communications and RPC protocols. Also worked with Unity Gaming Services’ Lobby and Relay for connecting players across the internet without needing port forwarding or additional network configuration. The project won “Best Serious Game” at the Quinnipiac GDD Showcase in 2024.
Role: Lead Programmer / Team Lead
Sample Work - Interactable Object Design
The objects available in the room can be divided into three different categories (simple, full, and utility):
The base object class is the Simple object, which is an abstract object implementation:
The FullObject and UtilityObject both implement this and replace the Interact() and Start() methods.
Objects in the room that only open an interface will extend this class to add a consistent way of interacting with them.
Examples of Simple objects include the letter game board, magnet board, and phone.
For the 3D-viewable objects we used the Full object:
Full objects create a copy when interacted with, and this copy is projected in front of the player where it can be manipulated.
These copies are local to the player interacting with them, and are rendered off-screen to prevent duplication or strange appearances of extra objects.
This object can be configured to spin around in front of the player, and can also have custom controls.
Examples of Full objects include the dominos, pill bottles, and locked book.
For the collectable objects we used the Utility object:
These objects are added to a shared inventory upon collection, where they can be individually used by each player.
The collection of these objects is synchronized between all connected clients using a networked boolean.
When using one of these objects, the Interact() method will specify what happens.
Some objects will further specify an InteractAllClients() method, allowing all players to observe a change, like with clues.
Examples of Utility objects include the clues, secret notes, and guide books.