Blueprint Examples
End-to-end recipes you can read top-to-bottom. Each one calls real UOS nodes - copy them into your own Blueprints, swap the IDs, and you have a working flow.
1. Sign in with Steam, then EOS Connect
Most Steam-shipping titles want EOS access without forcing players through an Epic browser flow. Use the player's Steam auth ticket as an external credential to mint a ProductUserId.
Flow
- 1.On
BeginPlay, branch onUOS Steam Subsystem -> Is Logged On. - 2.Call
UOS Steam User Subsystem -> Get Auth Session Ticketwith an empty Identity. Save the returnedTicketHandleandTicketData. - 3.Hex-encode the
TicketDatabytes (one Blueprint function: loop bytes, format as%02X). EOS Connect expects a hex string. - 4.Call
UOS EOS Connect Subsystem -> LoginwithToken = hexString,AccountType = Steam (App Ticket). - 5.Bind
OnLoginComplete. On success store the resultingFUOSProductUserIdin yourUGameInstance. - 6.On
EndPlaycallUOS Steam User Subsystem -> Cancel Auth Ticketwith the savedTicketHandle.
Heads up
If
OnLoginComplete reports the user doesn't exist yet, the result includes a ContinuanceToken. Pass it to Create User on the same subsystem - that's first-launch onboarding. UOS exposes the token as an opaque field on the result so you can wire the two nodes together.2. Award a Steam achievement on level complete
One-time setup
- -In Steamworks, define your achievement (e.g.
ACH_BEAT_LEVEL_1). - -In your Blueprint, ensure stats are loaded once at startup.
On level complete
UOS Steam User Stats Subsystem -> Set Achievement ApiName = "ACH_BEAT_LEVEL_1" UOS Steam User Stats Subsystem -> Store Stats // toast appears in-overlay when this commits
Note
For progress-based achievements, call
Indicate Achievement Progress with current/max. Steam shows a progress toast without unlocking.3. Create an EOS lobby and invite a friend
Host
- 1.
UOS EOS Lobby Subsystem -> Create Lobby:LocalUser = <ProductUserId> MaxMembers = 4 Permission = JoinViaPresence BucketId = "4v4_ranked" PresenceEnabled = true Attributes = [ { Key: "map", StringValue: "Forest", bPublic: true }, { Key: "mode", StringValue: "Ranked", bPublic: true }, ] - 2.Bind
OnLobbyCreated. The result includes the new LobbyId. - 3.Call
Send Invitewith the LobbyId + a friend's ProductUserId.
Invitee
- 1.Bind
OnInviteReceivedon Game Instance startup. - 2.On accept (your own UI button), call
Join Lobby By Invite Id. - 3.
OnLobbyJoinedfires with success + LobbyId.
4. Save / load a slot to Steam Cloud
Serialize your save struct to bytes (FArchive, JsonObject -> FString -> UTF8 bytes, or any custom format).
Save
Bytes = SerializeSaveStruct(MySaveData) UOS Steam Remote Storage -> File Write FileName = "save_slot_1.json" Data = Bytes
Load
UOS Steam Remote Storage -> File Exists ("save_slot_1.json") ? continue : skip
UOS Steam Remote Storage -> File Read ("save_slot_1.json", out Data)
DeserializeSaveStruct(Data) -> MySaveDataTip
Mirror the same flow with
UOS EOS Player Data Storage Subsystem for cross-platform cloud saves.5. Push-to-talk on EOS RTC
- 1.On lobby join, mint a participant token via your backend (you call the EOS RTC Web API there). Hand the result to:
UOS EOS RTC Subsystem -> Join Room LocalUser = <ProductUserId> RoomName = LobbyId ClientBaseUrl = result.ClientBaseUrl ParticipantId = ProductUserId.AsString ParticipantToken = result.Token
- 2.Default the mic to muted:
UOS EOS RTC Audio Subsystem -> Update Sending bUnmuted = false
- 3.Bind a key (Tab) to toggle
bUnmuted:trueon press,falseon release. - 4.On lobby leave, call
Leave Room.
6. Publish a Workshop item
- 1.
UOS Steam UGC Subsystem -> Create Item. BindOnItemCreatedfor the new PublishedFileId. - 2.On success:
Start Item Update-> UpdateHandle. - 3.Configure the item:
Set Item Title (UpdateHandle, "My Map Pack") Set Item Description (UpdateHandle, "Three desert maps...") Set Item Preview (UpdateHandle, "C:/Path/preview.png") Set Item Content (UpdateHandle, "C:/Path/MapPack/") // folder Set Item Tags (UpdateHandle, ["maps", "desert"])
- 4.
Submit Item Update(UpdateHandle, ChangeNote). BindOnItemSubmittedfor the upload result.
7. Boot a Steam dedicated server
This runs on your dedicated build (Server target), not on the player client.
UOS Steam Game Server Subsystem -> Init
IP = 0 (any interface)
GamePort = 7777
QueryPort = 27015
Mode = AuthenticationAndSecure
VersionString = "1.0.0"
UOS Steam Game Server Subsystem -> Set Product ("MyGame")
UOS Steam Game Server Subsystem -> Set Game Description ("Ranked 4v4")
UOS Steam Game Server Subsystem -> Set Mod Dir ("MyGame")
UOS Steam Game Server Subsystem -> Set Server Name ("EU-Frankfurt-01")
UOS Steam Game Server Subsystem -> Set Map Name ("Forest")
UOS Steam Game Server Subsystem -> Set Dedicated Server (true)
UOS Steam Game Server Subsystem -> Set Max Player Count (8)
UOS Steam Game Server Subsystem -> Log On AnonymousBind OnLoggedOn to begin accepting players. On shutdown the subsystem auto-calls Log Off and SteamGameServer_Shutdown.
8. Show a server browser using Steam Matchmaking Servers
- 1.Bind
OnServerRespondedandOnServerListComplete. - 2.Call
Request Internet Server Listwith your AppId and a filter map (e.g.{ "map": "de_dust2" }). - 3.Each
OnServerRespondedappends a row to your UI list. - 4.On row click, hand
Address:ConnectionPortto UE'sOpenLevelwith?game=...args, or to your custom join logic.
9. Drive an EOS achievement from a stat
- 1.In the Dev Portal, define a stat
killsand an achievement that triggers atkills >= 100. - 2.On each kill:
UOS EOS Stats Subsystem -> Ingest Stat LocalUser = <ProductUserId> StatName = "kills" Amount = 1
- 3.The achievement is auto-unlocked server-side. Optionally mirror locally with
UOS EOS Achievements Subsystem -> Unlock Achievementsto fire UI immediately.
10. Initialize Easy Anti-Cheat client / server
Client (player build)
UOS EOS Anti-Cheat Client Subsystem -> Begin Session Mode = ClientServer // or PeerToPeer // Bind OnClientIntegrityViolated -> log + boot back to main menu
Server (dedicated build)
UOS EOS Anti-Cheat Server Subsystem -> Begin Session RegisterTimeoutSeconds = 60 ServerName = "EU-Frankfurt-01" bEnableGameplayData = false
Heads up
EAC enforcement also requires the EAC bootstrapper, signed executables, and per-title configuration in the Epic Dev Portal. These Blueprint nodes are the runtime API; the rest of the pipeline is engine + portal config.