A simple integration for the most common used Steam api feature.
If you are building a small game and want to quickly add steam features this is the right asset.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 coveredInitializationPlayer Info - PlayerName and SteamId with offline fallback valuesAchievements - Unlock, query, and reset achievements with async API and OnAchievementUnlocked eventCloud Save -Read/write files to Steam Remote Storage with transparent fallback to local persistent storage when Steam is unavailableLeaderboards -Upload scores and fetch global top entries with async/await; leaderboards are auto-created results are in-memory cached to reduce API callsRich Presence -Set player status and custom key-value pairs visible to friends in the Steam clientOverlay -Open the Steam overlay to Friends, Achievements, or the Store page with a single method call; OnOverlayActivated event includedScreenshots -Trigger Steam screenshots that go directly into the player's Steam librarySteam Deck Detection -SteamService.IsRunningOnSteamDeck lets you switch to a gamepad-friendly UI with one checkOffline / Editor Mode -All features degrade gracefully; no if (Initialized) guards needed in gameplay codeEvent-driven architecture -OnInitialized, OnOverlayActivated, OnAchievementUnlocked, OnLeaderboardUpdatedDebug logging - Toggle verbose Steam logs via a ScriptableObject config asset; warnings always shownScriptableObject configuration -App ID, cache duration, and fallback folder configured per-project without touching codeTechnical DetailsUnity Version: Unity 6 (6000.0) or newerLanguage: C# 9 — async/await, TaskCompletionSource, nullable reference typesPlatform Support: Windows (x64), macOS, Linux, Steam Deck (SteamOS)Editor OS Support: Windows, macOS, LinuxScripting Backend: Mono and IL2CPP both supportedRender Pipeline: Compatible with Built-in, URP, and HDRP — no render pipeline dependencyArchitecture:Single static facade (SteamService) as the only public entry pointFeature modules instantiated and owned by the facade — no scattered singletonsAll Steam callbacks dispatched on Unity's main thread via SteamAPI.RunCallbacks() in MonoBehaviour.Update()Callbacks converted to Task using TaskCompletionSource + Steamworks.NET CallResult — no polling, no coroutines[RuntimeInitializeOnLoadMethod(SubsystemRegistration)] ensures correct static reset when entering Play Mode, including projects with Domain Reload disabledFull #if !DISABLESTEAMWORKS guard coverage — compiles and operates cleanly when Steamworks is strippedIncluded Files: 10 runtime scripts, 1 data model, 3 example scripts, 1 ScriptableObject config, README, UPM package.json templateDependenciesSteamworks.NET20.x or newerGitHub via UPM Git URL or .unitypackageSteam Client (runtime)Any currentInstalled on the end-user's machine — not bundledSteamworks.NET is the only third-party dependency. It is free and open-source (MIT licence).This package does not include Steamworks.NET — import it separately before use.No other packages required. No TextMeshPro, no Addressables, no NewtonSoft JSON, no additional Unity packages.Some code assistant ahs been used to generate part of the scripts and comments



