Version 1.6.1+ | Requires EOS Integration | Unreal Engine 5.4+
The EOS Player Data Bridge provides cloud storage for offline-critical save data using Epic Online Services' Player Data Storage API. Data is P2P replicated and available even without network connectivity.
| Feature | Details |
|---|---|
| Max file size | 256 KB per file |
| Total storage | 1 GB per player |
| Replication | P2P (available offline) |
| Requires | bEnableEOSIntegration=true in Supabase.Build.cs |
| Subsystem | OnlineSubsystemEOS must be active |
When to use: For offline-critical save data that must survive without network. For structured, queryable game data, use Supabase PostgreSQL instead.
The core manager class that wraps the EOS SDK IOnlineUserCloud interface.
// 1. Create the manager
USupabaseEOSPlayerData* PlayerData = NewObject<USupabaseEOSPlayerData>();
// 2. Initialize after EOS Platform is ready
bool bSuccess = PlayerData->Initialize();
// 3. Use Read / Write / Query operations
// 4. Clean up when done
PlayerData->Shutdown();
OnlineSubsystemEOS must be configured in DefaultEngine.iniInitialize() after the EOS Platform is readyAsyncEOSWritePlayerData)Writes a key-value entry to EOS Player Data cloud storage.
| Pin | Type | Direction | Description |
|---|---|---|---|
| World Context | Object |
Input | World context object |
| Key | String |
Input | Unique key (filename) for the data |
| Data | Byte Array |
Input | Raw bytes to store (max 256 KB) |
| On Success | Player Data Written |
Output | FEOSPlayerDataWriteResult |
| On Failure | EOS Error |
Output | Operation name + error message |
Result struct — FEOSPlayerDataWriteResult:
| Field | Type | Description |
|---|---|---|
| bWasSuccessful | Bool |
Whether the write succeeded |
| Key | String |
The key that was written |
| BytesWritten | Int32 |
Number of bytes written |
| ErrorMessage | String |
Error details if failed |
AsyncEOSReadPlayerData)Reads a key-value entry from EOS Player Data cloud storage.
| Pin | Type | Direction | Description |
|---|---|---|---|
| World Context | Object |
Input | World context object |
| Key | String |
Input | Key (filename) to read |
| On Success | Player Data Read |
Output | FEOSPlayerDataEntry |
| On Failure | EOS Error |
Output | Operation name + error message |
Result struct — FEOSPlayerDataEntry:
| Field | Type | Description |
|---|---|---|
| Key | String |
The key (filename) of the entry |
| Data | Byte Array |
Raw byte data of the file |
| LastModified | String |
Timestamp of last modification (UTC) |
AsyncEOSQueryPlayerData)Enumerates all player data keys stored in the cloud.
| Pin | Type | Direction | Description |
|---|---|---|---|
| World Context | Object |
Input | World context object |
| On Success | Player Data Keys Queried |
Output | Array of key names |
| On Failure | EOS Error |
Output | Operation name + error message |
┌─────────────────────┐
│ Write Player Data │
│ │
│ Key: "player_save" │
│ Data: <Byte Array> │
│ │
├──────────┬──────────┤
│ OnSuccess│ OnFailure│
│ │ │
▼ ▼ ▼
[Process [Log [Log
Result] Error] Error]
// Writing save data
void AMyGameMode::SaveToCloud(const FString& SaveKey, const TArray<uint8>& SaveData)
{
UAsyncEOSWritePlayerData* WriteOp = UAsyncEOSWritePlayerData::WritePlayerData(
this, SaveKey, SaveData
);
WriteOp->OnSuccess.AddDynamic(this, &AMyGameMode::OnSaveSuccess);
WriteOp->OnFailure.AddDynamic(this, &AMyGameMode::OnSaveFailure);
WriteOp->Activate();
}
// Reading save data
void AMyGameMode::LoadFromCloud(const FString& SaveKey)
{
UAsyncEOSReadPlayerData* ReadOp = UAsyncEOSReadPlayerData::ReadPlayerData(
this, SaveKey
);
ReadOp->OnSuccess.AddDynamic(this, &AMyGameMode::OnLoadSuccess);
ReadOp->OnFailure.AddDynamic(this, &AMyGameMode::OnLoadFailure);
ReadOp->Activate();
}
| Delegate | Signature | Description |
|---|---|---|
FOnPlayerDataWritten |
FEOSPlayerDataWriteResult |
Fired after successful write |
FOnPlayerDataRead |
FEOSPlayerDataEntry |
Fired after successful read |
FOnPlayerDataKeysQueried |
TArray<FString> |
Fired with all key names |
FOnEOSError |
(FString Operation, FString ErrorMessage) |
Fired on any error |
Represents a single player data file.
| Field | Type | Blueprint | Description |
|---|---|---|---|
| Key | FString |
ReadOnly | File key/name |
| Data | TArray<uint8> |
ReadOnly | File contents (raw bytes) |
| LastModified | FString |
ReadOnly | Last modified timestamp (UTC) |
Result of a write operation.
| Field | Type | Blueprint | Description |
|---|---|---|---|
| bWasSuccessful | bool |
ReadOnly | Success flag |
| Key | FString |
ReadOnly | Written key |
| BytesWritten | int32 |
ReadOnly | Bytes written |
| ErrorMessage | FString |
ReadOnly | Error details |
mygame_settings, mygame_save_slot_1FJsonObjectConverter to convert structs to JSON bytes before writingbEnableEOSIntegration = true in Supabase.Build.csOnlineSubsystemEOS configured with valid Product ID and Deployment IDDocumentation for Supabase UE5 Plugin v1.6.1 by MountainLabs UG