Drum Heaven

Drum Heaven was my first VR project, created in 8 weeks for the Meta Quest 2/3 together with someone else who is a 3D artist. My roles were programmer and scrum master, which gave me experience in both technical implementation and project coordination.

This project taught me the importance of using your time efficiently. It was my first time bringing together VR development, rhythm gameplay, and agile management into one project.

With only 8 weeks to work, I gained valuable experience in rapid prototyping and agile iteration, learning how to adjust designs quickly when something wasn’t working.

To make the drumming experience more authentic, I also integrated a physical kick pedal into the game. I implemented input handling so the pedal could be used as the bass drum, and ensured it worked alongside VR controller inputs.

During development we wanted to add a drum roll mechanic, it would behave like any other hold note in other rhythm games. But I was not able to finish the mechanic in time so it did not make it in the final build.

Development

Game Trailer

Project Info:

Role: Programmer & Scrum
Team: Silver & Can
Time: 8 Weeks
Engine: Unity
Github

In this project I learned to import and use a different library for a unity project.
I used the DryWetMIDI library to make an algorithm that generates a beatmap based on the MIDI file imported.
You can see more about that algorithm in my code snippet below.

Explanation

The script I chose to highlight is the core of Drum Heaven’s beatmap system. Its main function is to parse a MIDI file and translate it into playable drum notes in the game.

When the script is called, it:

  • Parses the MIDI file and filters out all the drum-specific notes

  • Places each note at its corresponding drum piece in the game
    (if it exists)

  • Handles the lead-in delay, ensuring that notes spawn before the music begins so gameplay feels synchronized

For asset management, I used StreamingAssets to reference the MIDI files. While this worked well for our PC build, it was an issue when we had to build to .apk for stand alone use.

This system allows the game to technically process any MIDI file.
If the file doesn’t contain drum notes, no notes will spawn.

Code Snippet

Modular Code

I learned to write easy and scalable code for future mechanics and changes to the game.

Everything I learned

Use of library’s

How to integrate external libraries (DryWetMIDI) into Unity projects and make proper logic with it.

User Friendly

I made components and ScriptableObjects easy to understand, so my project partner could easily add new songs.

Design choises

Throughout development we had to make design choices we hadn’t considered yet before starting this project. Like how to make the player navigate menu’s or how will we handle environment changes.