Role : Gameplay Programmer, Product Owner
Team Size: 4
Time Frame: 8 Weeks
Engine: Unity (C#)
GitHub Page: https://github.com/TeamAbble/FPS-Team-Project
Work Inc began development in early 2024 as a graded assignment on the Game Production course at De Montfort University, developed by my team, Balla Games. The game has since received an offer by the university to be published to steam. as well as positive feedback from members of both Rare Ware, and Supermassive Games, who viewed the game at an event at the university.
Work Inc was my first major 3D project with my team, Balla Games. As such it taught me a lot of the fundamentals of 3D games programming. I learned important skills such as AI Navigation for the enemies, as well as their interaction with the Game Manager to create the wave system.
Outside of learning core 3D programming skills, I also gained experience in working to a deadline to create a complete, polished product. Our team made use of tools such as Jira to track our progress and plan goals, and Github for source control.
As The Product Owner I was largely responsible for planning the mechanics and overall design of the game. I was tasked with writing the Game Design and Technical Design Documents for the game. Once development was complete I wrote a presentation for the game, demonstrating key features and how they were implemented.
I was in charge of developing the base character class, which featured various methods for managing health, damage and movement, as well as the behavior of the game's enemies, making use of Unity's AI Navigation package, as well as a finite state machine I created to switch between states e.g. chasing and attacking. I also implemented much of the games UI
I created a finite state machine for the enemies in C# using an Enum to define my states. I then made use of a switch case, which contained the different behaviors for each state, within the Enemy's Fixed Update method. I created two classes for the enemies, Melee Enemy, and Ranged Enemy. These both inherited from an abstract class called Enemy, which contained all of the relevant functionality for both types of enemy, such as health and damage systems, as well as some virtual methods that needed their own definitions for each enemy type to provide unique functionality.
For the navigation I used Unity's AI Navigation Package, which includes a useful Navmesh system for pathfinding around 3D spaces. This system uses AStar Navigation to allow a Navmesh Agent to path around an area avoiding obstacles. We used the package as it allowed us to cut development time implementing our own AStar Navigation algorithm, whilst having the same results. This allowed us to focus on other key components such as the Wave Spawning System.
Our wave system revolves around a serializable class called Wave, which contains a list of allowed enemies, as well as the number of enemies to be spawned that wave. Once spawned the total number of enemies would be calculated and stored in a variable, which would decrement every time an enemy died. When this value hit zero, a cool-down timer would start, then the new wave would begin.
I was also responsible for scripting and implementing several UI features. I created the Heath and Dash bars using Unity's UI Slider objects, as well as handling the scene transitions between the various menus and main game. I created a simple settings menu that allowed the player to tweak the Volume of the game's audio, as well as the mouse sensitivity for aiming. I was also responsible for creating the UI elements for displaying Money and Ammunition, as well as the wave number, each requiring an updating TextMeshPro component to display their appropriate values.
Scripting the UI for Work Inc taught me how to use several of Unity's built in UI components, as well as tweaking and saving Game Settings to JSON. All of these skills have since been used both in Unity, and in the development of our next major project; Coney 3D, which is being developed in Unreal.
Our group made use of a range of collaborative tools to manage our development. We used Github for source control, which also allowed us to work on the game remotely, as well as have multiple people working in the game engine at a time. Jira was used to manage the teams work flow. As the Product Owner it was my responsibility to communicate with the sprint leader about assigning tasks to the appropriate team members, ensuring each member had an appropriate workload.