Project type: Game

Date: 19-03-2024

Status: Finished

Software used: Unity, Visual Studio

Language used: C#

Role: Lead Developer

Team size: 3 developers en 4 artists

About the project

In dit project heb ik in een team samengewerkt voor onze opdrachtgever Paladin Studios. De klant wilde een leuk coöperatief spel dat door alle leeftijden gespeeld kon worden. Het spel moest daarom een unieke game mechanic hebben die makkelijk te leren en begrijpen is.

De uitkomst is een co-op party game, waarbij spelers een trein besturen en pakketjes bij de juiste stations moeten afleveren in een zo kort mogelijke tijd. Onderweg kunnen de spelers slechte stukken rails tegenkomen waardoor pakketjes en de trein beschadigd raken. Deze moeten dan zo snel mogelijk gerepareerd worden.

In this project I worked on the parts below.

State Machine

Voor dit project heb ik een herbruikbare State Machine gebouwd. Deze zorgt ervoor dat altijd de juiste UI zichtbaar is. Een handige feature van dit systeem is dat je een parent state kunt instellen. Hierdoor kun je de basis-UI makkelijk hergebruiken, waarna de child states alleen specifieke nieuwe UI-elementen toevoegen. Dit heb ik bijvoorbeeld toegepast in de lobby: de interface is daar grotendeels hetzelfde voor de host en de client. Door dit systeem kon ik echter makkelijk instellen dat de client de tekst ‘Searching host…’ ziet, terwijl alleen de host de ‘Start Session’-knop in beeld krijgt.

Player Manager

De Player Manager is verantwoordelijk voor het spawnen van de spelers en wijst ze automatisch een random character model toe. Een speler wordt pas gespawnd wanneer iemand in de lobby op een knop drukt met een toetsenbord of controller.

Het is hierbij mogelijk om meerdere input devices op één client te gebruiken. In totaal kunnen er maximaal 6 spelers (input devices) meedoen aan een sessie, en het maakt niet uit over hoeveel verschillende apparaten (clients) deze verdeeld zijn.

Dit proces verloopt via het netwerk. De client stuurt een verzoek naar de host om een speler in te spawnen. Zodra de client de gespawnde speler vanuit de host heeft ontvangen, koppel ik direct het juiste input device aan dit nieuwe character.

Multiplayer Lead

Als onderdeel van mijn rol als Lead Developer heb ik aan alle features in de game meegewerkt. Omdat ik de networking plugin voor ons spel (FishNet) had onderzocht, hielp ik mijn teamgenoten met het networken van hun features. Zo zorgden we ervoor dat alles ook goed werkte wanneer het spel met meerdere apparaten in dezelfde sessie werd gespeeld. Dit ging onder andere om systemen zoals de grabbables en de train controller.

Damage and Repair System

Het Damage and Repair System regelt alle objecten die tijdens de treinrit schade oplopen. Deze schade wordt erger zodra de trein over een slecht stuk spoor rijdt. Spelers moeten met een hamer continu de pakketkasten repareren om schade aan de pakketjes te voorkomen. Wordt een pakketje los in de trein gelegd, dan krijgt het direct schade, wat uiteindelijk punten kost. Daarnaast kan ook de oven kapotgaan, waardoor de trein compleet stilvalt.

Ik heb dit technisch makkelijk gemaakt om te gebruiken in systemen. Om bijvoorbeeld een object repareerbaar te maken, hoeft de class simpelweg de IRepairable interface te implementeren. De hamer zoekt vervolgens binnen zijn bereik automatisch naar deze interface om de reparatie uit te voeren. Daarnaast heb ik ook een basis-damagable en basis-traindamagable gemaakt om makkelijk nieuwe objecten te kunnen maken die schade kunnen krijgen.