Hygiene Hero Cup

An award winning educational game teaching personal hygiene to kids aged 10–14 through three physics-driven mini-games.

Role
Sole Programmer
Year
Stack
Unity, C#

Hygiene Hero Cup was built by Team StepUp, six graduate students at CMU's Entertainment Technology Center, in collaboration with the World Shoe Fund. As the sole programmer, I built every gameplay system, interaction, and feature our designers dreamed up. The goal was to teach essential hygiene knowledge to students aged 10–14 in a way that's genuinely fun, proof that handwashing can be a competitive sport. Of all the projects I've worked on, this one is closest to my heart.

Update: Hygiene Hero Cup went on to win the 2025 International Serious Play Conference's Gold Medal Award for student entries.

A scalable, agile game system

I designed the system to balance rapid prototyping with long-term scalability. I leaned on established patterns (the Observer pattern via Unity/C# events, and a Flyweight approach through ScriptableObjects) to keep things efficient and maintainable. I deliberately used singletons for global instances: not the most scalable choice, but ideal for fast iteration. With more time I'd have explored Command patterns for game-progress tracking and replaced singletons with dependency injection or a service locator. Most importantly, I documented everything so future developers (including future me) could pick up where I left off.

Mini 1 — the Hygiene Jump Challenge

Mini 1 blends traditional African high-jumping with the steps of handwashing. As the core mechanic, I implemented a character jump based on the parabolic trajectory equation for precise, dynamic movement in 3D space. By fixing key points on the arc and solving for the coefficients, I tuned the jump to feel natural and responsive:

y = a·x² + b·x + c

a  controls the parabola's steepness and direction
b  affects the axis of symmetry
c  sets the y-intercept

Beyond the jump, I handled game states, collision detection, and coroutines, though with more time I'd have refined the state transitions with a command pattern.

Mini 2 — the Soap Surfing Challenge

Mini 2 was the most technically challenging mechanic in the game: players surf across a giant foot on a bar of soap (a phrase that somehow made it into a serious design doc). I built a physics-based surfing controller around two core systems.

Physics-driven movement adapts to player input, camera orientation, and surface normals to mimic real surfing: calculating movement relative to the camera, aligning the player's up-direction with the foot's surface normal, and interpolating velocity while projecting motion onto the surface.

Gravity and surface adaptation uses a downward raycast to continuously detect the foot's surface and align gravity with the terrain, letting the player surf the contours while keeping momentum. I added a wall-climbing safeguard to prevent players getting stuck, plus polish like tilting into turns. Enemy spawning and collisions kept it a game, not just a physics demo.

Mini 3 — the Shoe Dash Challenge

Mini 3 ran on the tightest schedule of the cycle. I built a terrain-block spawning system and a stage-management system for seamless level progression, then used abstract classes and inheritance to structure coins, power-ups, obstacles, and checkpoints, so designers could build levels just by dragging elements into place in Unity. I wired mechanics through UnityEvents so designers had direct control without touching code. With more time I'd have explored procedural generation and object pooling.

The Outside World

Our original vision was an expansive interactive world full of NPCs. As art and playtest constraints tightened, we refined scope. I'm proudest of a physics-based player controller using the floating-capsule technique for smooth, responsive movement, and of solving Unity's notorious video-playback stutter with an asynchronous preloading system that loads video in the background for seamless transitions.

Reflection

This was the most rewarding project of my journey so far. I deepened my understanding of Unity's project structure and physics-based mechanics, and honed my ability to design modular systems that empowered the whole team. The most fulfilling moment came during playtesting with the children: seeing their smiles made every challenge worth it.