Overview
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.
Technical Breakdown
Despite never reaching submission, several systems were built to a functional state:
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.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.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.Challenges & Lessons
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.
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.