DocsUOSBlueprint Examples

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. 1.On BeginPlay, branch on UOS Steam Subsystem -> Is Logged On.
  2. 2.Call UOS Steam User Subsystem -> Get Auth Session Ticket with an empty Identity. Save the returned TicketHandle and TicketData.
  3. 3.Hex-encode the TicketData bytes (one Blueprint function: loop bytes, format as %02X). EOS Connect expects a hex string.
  4. 4.Call UOS EOS Connect Subsystem -> Login with Token = hexString, AccountType = Steam (App Ticket).
  5. 5.Bind OnLoginComplete. On success store the resulting FUOSProductUserId in your UGameInstance.
  6. 6.On EndPlay call UOS Steam User Subsystem -> Cancel Auth Ticket with the saved TicketHandle.
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. 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. 2.Bind OnLobbyCreated. The result includes the new LobbyId.
  3. 3.Call Send Invite with the LobbyId + a friend's ProductUserId.

Invitee

  1. 1.Bind OnInviteReceived on Game Instance startup.
  2. 2.On accept (your own UI button), call Join Lobby By Invite Id.
  3. 3.OnLobbyJoined fires 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) -> MySaveData
Tip
Mirror the same flow with UOS EOS Player Data Storage Subsystem for cross-platform cloud saves.

5. Push-to-talk on EOS RTC

  1. 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. 2.Default the mic to muted:
    UOS EOS RTC Audio Subsystem -> Update Sending
      bUnmuted = false
  3. 3.Bind a key (Tab) to toggle bUnmuted: true on press, false on release.
  4. 4.On lobby leave, call Leave Room.

6. Publish a Workshop item

  1. 1.UOS Steam UGC Subsystem -> Create Item. Bind OnItemCreated for the new PublishedFileId.
  2. 2.On success: Start Item Update -> UpdateHandle.
  3. 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. 4.Submit Item Update (UpdateHandle, ChangeNote). Bind OnItemSubmitted for 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 Anonymous

Bind 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. 1.Bind OnServerResponded and OnServerListComplete.
  2. 2.Call Request Internet Server List with your AppId and a filter map (e.g. { "map": "de_dust2" }).
  3. 3.Each OnServerResponded appends a row to your UI list.
  4. 4.On row click, hand Address:ConnectionPort to UE's OpenLevel with ?game=... args, or to your custom join logic.

9. Drive an EOS achievement from a stat

  1. 1.In the Dev Portal, define a stat kills and an achievement that triggers at kills >= 100.
  2. 2.On each kill:
    UOS EOS Stats Subsystem -> Ingest Stat
      LocalUser = <ProductUserId>
      StatName  = "kills"
      Amount    = 1
  3. 3.The achievement is auto-unlocked server-side. Optionally mirror locally with UOS EOS Achievements Subsystem -> Unlock Achievements to 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.