Crossplay Lobbies
Create cross-platform lobbies for listen server games with voice chat, host migration, and Steam integration
Crossplay Lobbies
Lobbies are ideal for listen server games where players gather before starting a match. UCIK lobbies provide:
- Voice chat integration
- Host migration - lobby persists if host leaves
- Presence - friends see your lobby status
- Steam shadow lobbies - automatic Steam friends list integration
Creating a Lobby
Use the Create Crossplay Session node with SessionType = Lobby.
Quick Setup
SessionType = Lobby
Visibility = Public
MaxPlayers = 8
bAutoServerTravel = true
bAutoDetectSessionReady = true
MapName = "/Game/Maps/MyGameMap"This creates your lobby, travels to the map, and automatically marks the session as ready when the server starts listening.
Parameters
Session Name
The internal session name identifier (e.g., "GameSession"). Must be unique per session.
Settings
Travel & Ready Detection:
| Parameter | Type | Description |
|---|---|---|
bAutoServerTravel | Boolean | Automatically travel to MapName after lobby creation. |
MapName | String | The map to travel to. Only used if bAutoServerTravel is true. |
bAutoDetectSessionReady | Boolean | Auto-detect when server starts listening. If false, call SetSessionReady manually. |
Lobby Configuration:
| Parameter | Type | Description |
|---|---|---|
SessionType | Enum | Set to Lobby for listen server games. |
Visibility | Enum | Public: Anyone can find. Friends Only: Friends only. Private: Invite only. |
MaxPlayers | Integer | Maximum players (2-64 for lobbies). |
GameMode | String | Optional game mode URL option. |
Region | Enum | Region preference (Auto, NA, EU, Asia, etc.). |
Lobby-Specific Options:
| Parameter | Type | Description |
|---|---|---|
bEnableVoiceChat | Boolean | Enable built-in voice chat. |
bEnableHostMigration | Boolean | Lobby persists and migrates to another member if host leaves. |
bUsePresence | Boolean | Show lobby status to friends. Only one session can use presence. |
bAllowJoinInProgress | Boolean | Allow joining after game starts. |
Custom Attributes:
| Parameter | Type | Description |
|---|---|---|
CustomAttributes | Map | Key-value pairs (String, Boolean, Integer, Double) for filtering. |
Output Delegates
| Delegate | Description |
|---|---|
OnSuccess | Lobby created successfully. Returns FUCIK_SessionResult. |
OnFailure | Lobby creation failed. Returns error message. |
OnSessionReadyChanged | Server started/stopped listening. |
Usage Modes
Full Auto Mode (Recommended)
bAutoServerTravel = true
bAutoDetectSessionReady = true
MapName = "/Game/Maps/MyGameMap"UCIK handles everything automatically.
Manual Travel Mode
bAutoServerTravel = false
bAutoDetectSessionReady = trueYou call ServerTravel, UCIK detects when ready.
Full Manual Mode
bAutoServerTravel = false
bAutoDetectSessionReady = falseYou control everything. Call SetSessionReady(true) when ready.
Voice Chat
When bEnableVoiceChat is enabled, UCIK sets up EOS voice chat for all lobby members. Voice chat works cross-platform - Steam and Epic players can talk to each other.
Host Migration
With bEnableHostMigration enabled:
- Host leaves or disconnects
- EOS automatically promotes another member to host
- Lobby persists, game can continue
OnHostMigrationdelegate fires (implement in your game mode)
Without host migration, the lobby is destroyed when the host leaves.
Steam Shadow Lobbies
On Steam, UCIK automatically creates a "shadow lobby" linked to your EOS lobby:
- EOS Lobby Created - Gets connect string
- Steam Lobby Created - Stores EOS connect string as lobby data
This enables:
- Steam friends list shows your lobby
- Steam overlay invites work
- Steam lobby browser can find your game
- Players connect via EOS for cross-platform play
Shadow Lobby Data
| Key | Value |
|---|---|
EosJoinAddr | EOS connect string |
IsEosSession | "true" |
EosSessionId | EOS lobby ID |
IsListening | Server ready state |
You don't need to manage this - UCIK handles it automatically.
Custom Attributes
Store game-specific data for filtering and display:
Key: "MapName" → String "Sanctuary"
Key: "GameMode" → String "TeamDeathmatch"
Key: "MinLevel" → Integer 10
Key: "RankedMatch" → Boolean trueUse these when finding lobbies to filter results.
Session Result
The FUCIK_SessionResult returned contains:
| Field | Type | Description |
|---|---|---|
bSuccess | Boolean | Whether creation succeeded. |
SessionId | String | EOS Lobby ID. |
PlatformLobbyId | String | Steam Lobby ID. |
ConnectString | String | Address for joining. |
bIsListening | Boolean | Server accepting connections. |
ErrorMessage | String | Error details if failed. |
Platform Support
| Platform | EOS Lobby | Shadow Lobby |
|---|---|---|
| Windows (Steam) | Yes | Steam Lobby |
| Windows (Epic) | Yes | - |
| Mac (Steam) | Yes | Steam Lobby |
| Linux (Steam) | Yes | Steam Lobby |
| iOS | Yes | - |
| Android | Yes | - |
FAQs
When should I use Lobby vs Session?
Use Lobby for:
- Listen server games (player hosts)
- Games needing voice chat
- Games needing host migration
- Social/party games
- Up to 64 players
Use Session for dedicated servers. See Sessions.
Do I need to handle Steam separately?
No. UCIK creates and manages the Steam shadow lobby automatically. Your Blueprint code is platform-agnostic.
What happens if host leaves without host migration?
The lobby is destroyed and all players are disconnected. Enable bEnableHostMigration to prevent this.
Next: Sessions | Finding Sessions | Joining Sessions