2026 - Present
Steel Horse Framework
Programmer
An open-source Unity toolbox providing a lightweight service-locator architecture, pooled audio SFX/music playback, scene loading with a loading screen, a minimal REST API client, an encrypted save system, a generic runtime database system, a designer-authorable tag system, and a set of UI helpers (menu navigation, pause, player options, localization, gamepad-friendly cursor).
Source on GitHub ↗Open source
Architecture
- Designed a service-locator system that resolves interfaces (audio, music, scene loading, networking, database) from child components at runtime, letting any implementation be swapped by replacing a prefab component with no changes to calling code.
- Solved a duplicate-singleton initialization race by having every service expose an explicit Setup() method, called exactly once by the surviving singleton, instead of relying on Awake/Start, which could otherwise run on a short-lived duplicate object before Unity's DontDestroyOnLoad deduplication resolves.
- Built a generic runtime database system (Database<TEntry> / GameDatabase) so new game-wide data collections can be registered and resolved by type with zero additional service code, and a designer-authorable tag system on top of it, letting non-programmers assign tags via a dropdown instead of free-typed strings.
Audio & Music
- Built a pooled SFX playback system (24 voices by default) supporting both 2D UI and spatialized 3D world sounds, with per-cue randomized pitch/volume, selectable falloff curves, and handle-based stop control that uses a generation counter to prevent stale handles from affecting recycled voices.
- Implemented a dual-channel music player with automatic crossfading between tracks and playlists, driven independently through AudioMixer exposed parameters so per-song volume and mixer-level volume controls don't fight each other.
Networking
- Built a dependency-free REST client on top of UnityWebRequest and Unity's Awaitable async model, supporting GET/POST/PUT/DELETE, per-request headers, and cancellation tokens, with a response wrapper that preserves the raw body for error diagnostics even on failed requests.
Save System
- Implemented a generic save/load service that persists arbitrary serializable data as AES-CBC encrypted JSON, with a fresh IV generated per save so identical data never produces identical ciphertext.
Scene Loading
- Built an async scene loader with a configurable crossfade transition, explicitly unloading unused assets and forcing garbage collection before each load to avoid both scenes being memory-resident simultaneously.
- Implemented a Timeline-driven scene transition variant that can be triggered by either a Timeline signal or a configurable player input, guarded so only the first trigger fires the load.
UI Framework
- Built a stack-based menu navigation system (push/pop panels, gamepad/keyboard cancel-to-pop) alongside a tabbed-panel variant for non-stacking navigation, both supporting full gamepad/keyboard/mouse parity.
- Implemented a full player options screen wiring volume, quality, and resolution controls to PlayerPrefs persistence and Unity's audio/quality/resolution APIs.
- Added platform-aware UI behavior throughout (e.g. disabling gamepad-cursor and hover-to-select affordances on mobile) via a shared platform utility, and a Unity Localization-backed language switcher with device-language fallback.
Technologies
- Unity
- C#
- ScriptableObjects
- Unity Localization
- TextMeshPro
- Unity Audio Mixer
- Unity Input System
- DOTween
- UnityWebRequest
- AES Encryption