About
Under Pressure was the semester project of my sixth semester at h_da.
It’s a three-player online co-op multiplayer game where you and your crew must work together to keep your submarine operational, all while navigating the treacherous depths of the Bermuda Triangle in search of a lost part of your crew. Along the way, you’ll face unexpected challenges and chaotic emergencies that demand quick thinking, teamwork, and a steady hand to keep both your sub and its crew alive.
Introduction
My focus with this game was mainly to learn how to write good perfoming and efficient Netcode using Unity’s Netcode for Gameobjects. Also as this was my first time working on a bigger project with another programmer we had to learn how to efficiently split our tasks and work with each others systems.
The team consisted of two Programmers, one Tech/VFX Artist and Project Manager, one UI/Concept Artist and Project Manager, one Enviromental/3D Artist, one Animator and Game Designer, two Directors and three Sound Designers.
Saving bandwidth
One of the biggest technical challenges during the project was optimizing the algae task for network efficiency, while still keeping everything synched between each client. Initially, algae spread events were synced by sending exact positions everytime algae spread, which caused high bandwidth usage, as a algae room consists of 42×42 points and spreads ever 0.5 seconds. To solve this, I switched to a deterministic RNG approach – sending only a seed so each client could simulate the same spread locally. This drastically reduced network load. I applied similar optimizations elsewhere, like quantizing distance related sound data to bytes and only syncing them when values change. Non-critical systems, like the sonar UI, run fully client-side to avoid unnecessary network traffic.
Player and Submarine Controller
Early in development, I explored how best to handle player movement inside a moving submarine. I started with Unity’s Character Controller and synced and added the submarines velocity onto every player which proved to be unreliable. Switching to a Rigidbody-based controller allowed the player to stay naturally „parented“ to the submarine. To avoid getting stuck on walls, I added a second low-friction collider for smoother sliding and a function to help step over small obstacles like doorframes. This resulted in responsive and fluid movement inside the sub. The submarine itself also switched to a Rigidbody system for better terrain collision, with its Rigidbody isolated to interact only with the environment, avoiding interference with onboard elements.
What I learned
As this was my first big multiplayer project I learned a lot about Unitys Netcode and how and where to save bandwitdth. This was also my first time working with another Programmer on such a project, which taught me a lot about organising your code, spliting up your tasks and letting the other understand your systems so we both could benefit from each others implementations.
This was by far my most ambitious project yet, especially given the short time frame, but all in all eventhough it was really stressfull, thanks to the great teamwork on this project we did not get stuck on any major issues along the way.