Overview
Stop wrestling with callbacks, handles, and raw Steamworks.NET boilerplate.
This wrapper gives you a clean, modern API on top of Steamworks.NET so you can integrate features in minutes, and keep your gameplay code completely free of the Steam SDK details.
The system is designed to be drop-in ready: add the SteamManager MonoBehaviour to your bootstrap scene, assign a config asset, and you are done.
Built for professional Unity projects that ship on PC and Steam Deck, the wrapper handles all edge cases for you including offline mode, Steam client not running, Unity Editor play sessions, and domain-reload safety so your game never crashes when online service is unavailable.
Features covered
- Initialization
- Player Info - PlayerName and SteamId with offline fallback values
- Achievements - Unlock, query, and reset achievements with async API and OnAchievementUnlocked event
- Cloud Save -Read/write files to Steam Remote Storage with transparent fallback to local persistent storage when Steam is unavailable
- Leaderboards -Upload scores and fetch global top entries with async/await; leaderboards are auto-created results are in-memory cached to reduce API calls
- Rich Presence -Set player status and custom key-value pairs visible to friends in the Steam client
- Overlay -Open the Steam overlay to Friends, Achievements, or the Store page with a single method call; OnOverlayActivated event included
- Screenshots -Trigger Steam screenshots that go directly into the player's Steam library
- Steam Deck Detection -SteamService.IsRunningOnSteamDeck lets you switch to a gamepad-friendly UI with one check
- Offline / Editor Mode -All features degrade gracefully; no if (Initialized) guards needed in gameplay code
- Event-driven architecture -OnInitialized, OnOverlayActivated, OnAchievementUnlocked, OnLeaderboardUpdated
- Debug logging - Toggle verbose Steam logs via a ScriptableObject config asset; warnings always shown
- ScriptableObject configuration -App ID, cache duration, and fallback folder configured per-project without touching code