
Rhythm Action Game
Skills Developed
Main Roles
-
Unity C#
-
Feature Documentation
-
QA Testing
-
Professional Communication
-
Data-driven Programming
-
Technical Designer
Overview
We were given a choice between developing our own game concept or interpreting a brief provided by an external client. We saw the client brief as an opportunity to gain invaluable work experience before graduating university.
Working with the Client
Feedback was gathered through biweekly meetings, centered around updating the client with our progress and next steps. Furthermore, meetings had to be held outside of university time to accommodate our client’s distant time zones in Vancouver and Hong Kong.
In these meetings, we were encouraged to show professionalism and be willing to concede ideas and features if they could not fit into the client's vision. I was critical to this process, as my work prototyping features was presented to the clients and subsequently critiqued.
Project Management
For this project, we made use of Jira to track our tasks. We maintained a clear nomenclature, using epics to mark significant jobs with individual tasks to streamline production.

Global Game Jam 2025
The Global Game Jam was used as a testing bed before we committed to developing the game further. We experimented with a top-down perspective, and an attack system where you collect projectiles spawned by your partner: BAWDIE. After completing the jam, we decided a third person perspective and more traditional firing system would be simpler to iterate on for the scope of our project.




Data-Driven Design
To accelerate testing and development of new features, we made features using Unity’s scriptable object system. This let less programming oriented members of the team balance game systems without needing to know how the code worked.


Combat Tracks
The player defends themselves by chanelling music into damaging projectiles. By attacking on time with the song, the player will channel bursts and pellets towards their enemies.
The tempo is managed by a metronome function that ticks in time with the current
track’s bpm and time signature. The tracks are data driven and can be controlled within a scriptable object in the Unity Editor. From tempo to energy cost and maximum range, each attack can be tuned to feel unique in the game.
Each track has its own damage type, which deals increased damage to specific enemies.
Enemies
Enemies in the game follow a state machine that can change between idle, hunting and searching depending on the circumstance.
Enemy behaviour is data driven and tweakable in the editor, containing settings for detection ranges and options to change the projectile that an enemy shoots at the player.





Encounters
Player progression is driven by the encounter system. When the player enters an encounter, enemies are spawned and desired code is called through Unity’s event system.
Reinforcements are summoned gradually and the player is rewarded for surviving with ammo pickups and health. If the player dies at an encounter, they will be respawned just before the encounter with all of their unlocked tracks.
Quality Assurance
During the project, we maintained a QA document detailing the progress on new features and bugs that needed addressing.
