Comment on page
Getting started with Heathen's Steamworks.
Initializing the Steam API is the first step and you have a few choices on how you do this.
Video is silent but does have subtitles / captions
Heathen's Steamworks is built in layers, each layer offers another step of abstraction simplifying use of the API and doing more work for you. The lowest or most fundamental layer of Heathen's Steamworks is Steamworks.NET and is very much a raw Steam API wrapper, the highest or most "out of the box" would be our Prefabs which can handle many common uses cases with zero code on your part.
Follows is a quick break down of each layer and what it was meant for. Note you can mix and match without any issue. Our design expects that you will leverage our "high" level objects like prefabs to handle boilerplate, common or low importance items for you code free while you may prefer to go 100% bespoke with other features to achieve that perfect fit for your game.
- Scriptable Objects We have created scriptable objects for all Steam artifacts (stats, achievements, inventory items, etc.) making it easy to reference them and work with them via ours or your own component scripts as well as in code editors like Bolt.
- Data Layer We have created highly efficient and easy to use C# structs for all Steam artifacts (stats, achievements, inventory items, etc.). These allow programmers to work against these objects more efficiently and with significantly less coding required on there part. All of our structs are implicitly convertible between the primitive type, Steam API native type and our more abstracted structs and classes.
- API Layer We have wrapped all core Steam API interfaces with our own C# and Unity centric API wrapper. These API wrappers match 1 to 1 with the raw wrappers but do greatly simplify use such as replacing "Callback" and "CallResult" with UnityEvents and Action parameters. In addition we have created a number of "quality of life" features such as a queue system allowing you to queue multiple calls to the API for features that require 1 call be processed at a time such as Leaderboard queries.
- Steamworks.NET The raw Steam API as defined by Valve simply wrapped in C#. This is not our work but the work of Riley Labrecque. We are work with Riley wherever possible to support his efforts and help the wider Steam Developer community. Heathen's Steamworks is built on top of Steamworks.NET and thus it and the full raw API are available to you and interoperable with our wider toolset.
Steamworks Complete and whatever HLAPI you chose to work with have no impact on each other at all. You will use Steamworks and your HLAPI of choice exactly the same with as you would without the other.
You do not "require" Steamworks Complete in order to use Mirror, FishNetworking or NetCode for GameObject's or any other Steam transports. Those transports like our self work with Steamworks.NET directly.
That said you will need to initialize, configure and manage the Steam API before SteamNetworking interfaces can be used. Our Steamworks Complete and Steamworks Foundation packages make working with Steam API simple and stable. If you do not use Steamworks Complete or Foundation you would need to use the raw Steam API to initialize and configure your Steam API integration your self before your HLAPI could use the Steam transports.
Where can I find examples on using Steamworks Complete and (the HLAPI I chose)?
You cant because their is no need. Both Steamworks Complete and your HLAPI of choice work exactly the same rather or not the other exists. Thus we do not have an example of using (your HLAPI of choice) along side our Steamworks Complete.
If you want to see an example of using your HLAPI of choice with your HLAPI's Steam transport then you should contact them. We have links to Fish Networking, Mirror and NetCode for GameObjects in our articles but any HLAPI that works with Steamworks.NET properly will work.
If your trying to wrap your head around creating a multiplayer game on the Steam platform, we have an article for that as well. That article is not specific to any given HLAPI because the HLAPI you choose has no impact on the concepts involved.