Back
PROJECT DARK MATTER

What is Project Dark Matter?

Project Dark Matter was a Unity/C# game in development during the college era. The unit it was being built for was dropped from the curriculum before the submission date, which meant the project was never formally assessed or completed. What survived is a collection of implemented systems — some serious, some decidedly not — that document where Unity development was at the time.

The serious work included a Cinemachine-driven camera system, explosion physics triggers, and a dynamic music system that responded to player velocity in real time. The less serious work included a Rick Roll powerup, implemented with the same care and attention to architecture as everything else. That one was intentional.

Note This project was never submitted or graded. It exists as a record of early Unity and C# development, and as evidence that even scrapped work produces transferable knowledge.
  • Explosion trigger system working
  • Rick Roll powerup implemented
  • Cinemachine camera work
  • Dynamic music by player velocity
  • Unit dropped before submission

What Was Actually Built

Despite never reaching submission, several systems were built to a functional state:

  • Explosion Trigger System — a proximity-based explosion that fires when the player or a physics object enters a trigger collider. On activation, it applies a radial force to all Rigidbody components within a specified radius, launching them outward with force scaled by distance from the epicentre. A particle system fires in sync via an event call on the explosion script.
  • Rick Roll Powerup — a collectible item that, on pickup, interrupts the current BGM and plays Rick Astley's "Never Gonna Give You Up" via Unity's AudioSource component. The powerup was built using the same collectible base class as legitimate powerups — it was treated as a first-class feature, not an afterthought. It worked reliably.
  • Velocity-Based Dynamic Music — an AudioMixer setup with multiple music layers (ambient, medium-tempo, and high-intensity) cross-fades between tracks based on the player's current Rigidbody.velocity.magnitude. At low speeds, only the ambient layer is audible. As the player accelerates, higher-intensity layers fade in smoothly via mixer snapshot transitions. The effect gives the game a sense of momentum without any explicit speed UI.
  • Cinemachine — a Virtual Camera following the player character with configurable damping, aim offset, and a follow distance that adjusted dynamically based on movement speed — tighter at rest, pulled back during fast movement to give more field of view.

What the Scrapped Project Taught Me

The dynamic music system was the most technically interesting problem in the project. Getting smooth cross-fades between AudioMixer snapshots required understanding the difference between snapshot transitions and parameter automation — the initial approach used raw volume parameters, which produced audible clicks at transition points. Switching to mixer snapshots with an interpolation duration resolved it cleanly.

Key lesson Systems built for scrapped projects don't disappear. The velocity-based audio reactivity concept here directly influenced how audio was approached in later projects — the idea that game state should drive music, not just trigger it.

The explosion trigger system also revealed a Unity-specific pitfall: applying radial forces to many Rigidbodies in a single frame causes a physics solver spike. The fix was to spread force application across multiple FixedUpdate ticks using a coroutine, which smoothed the performance hit without changing the visible result.

The unit being dropped was frustrating — the project had momentum and the dynamic music system in particular was producing interesting results. The lesson is that external factors can kill a project at any stage, and the only protection is ensuring the systems you've built are self-contained enough to be reused elsewhere.