Functions
EOS_Initialize, Initialize EOS,EOS_Platform_Create or manage the ticker manually.the plugin takes care of the rest automatically.Overview
All nodes are async Blueprint actions — they return immediately and fire their output pins when the operation completes (via EOS server callbacks). You connect your logic to OnSuccess and OnFailure pins exactly like other async Unreal nodes.
Core Subsystem
UEOSCoreSubsystem is a GameInstanceSubsystem — you access it via Get EOS Core Subsystem or from C++ with GameInstance->GetSubsystem<UEOSCoreSubsystem>().
Initialize EOS
Initialize EOS → bool
Initializes the EOS platform. Must be called once before any other EOS node.
- If
OnlineSubsystemEOSis active and has a valid handle → borrows it (no double init). - Otherwise → reads credentials from
DefaultEngine.ini [EOSCore]and creates its own handle.
| Output | Type | Description |
|---|---|---|
| Return Value | bool | true if the platform handle is valid and ready |
Shutdown EOS
Shutdown EOS → void
Shuts down EOS cleanly. If the plugin owns the handle, it calls EOS_Platform_Release. If the handle was borrowed from the OSS, it only clears the internal pointer.
You rarely need to call this manually — the subsystem calls it automatically on
Deinitialize.
Is Initialized
Is Initialized → bool
Returns true if InitializeEOS has succeeded and the platform handle is still valid.
Is Player Logged In
Is Player Logged In → bool
Returns true if a player has successfully completed both Auth Login and Connect Login.
Get Local Epic Account Id
Get Local Epic Account Id → FString
Returns the Epic Account ID of the logged-in player as a string, or empty if not logged in.
Get Local Product User Id
Get Local Product User Id → FString
Returns the Product User ID (used for all game services) as a string, or empty if Connect Login has not completed.
Get User Info
Get User Info → FEOSCorePlayerInfo
Returns cached player info populated after Auth Login:
| Field | Type | Description |
|---|---|---|
DisplayName | FString | Player's Epic display name |
Nickname | FString | Player's nickname if set |
Country | FString | Player's country code |
PreferredLanguage | FString | Player's preferred language code |
Authentication
EOS Auth Login (Epic Account)
EOS Auth Login (Epic Account)
├─ WorldContext
├─ PrimaryLoginType [AccountPortal / ExchangeCode / PersistentAuth]
├─ Policy [PersistentThenPortal / PersistentThenExchangeCode / NeverFallback]
├─ bDeletePersistentAuthBeforeFallback [bool]
├─► OnSuccess → FEOSAuthResult
└─► OnFailure → FEOSAuthResult
Logs the player in with their Epic Games account.
Parameters:
| Parameter | Type | Description |
|---|---|---|
PrimaryLoginType | EEOSLoginCredentialType | Login method to use (see table below) |
Policy | EEOSAuthLoginPolicy | Fallback behavior if primary fails |
bDeletePersistentAuthBeforeFallback | bool | If true, deletes the cached persistent token before attempting fallback — recommended to avoid stale token issues |
Login Types:
| Value | Use case |
|---|---|
AccountPortal | Opens the Epic browser portal. Best for testing without the launcher. |
ExchangeCode | Game launched from Epic Games Launcher (production). Requires ?AUTH_TYPE=exchangecode argument. |
PersistentAuth | Reuses a locally saved token (silent re-login). Always try this first in production. |
Policies:
| Value | Behavior |
|---|---|
PersistentThenPortal | Try PersistentAuth first, fall back to AccountPortal on failure. Recommended for dev/testing. |
PersistentThenExchangeCode | Try PersistentAuth first, fall back to ExchangeCode on failure. Recommended for production. |
NeverFallback | Only tries the PrimaryLoginType. No automatic retry. |
Output — FEOSAuthResult:
| Field | Type | Description |
|---|---|---|
EpicAccountId | FString | Epic Account ID on success |
ErrorMessage | FString | EOS error code on failure |
PrimaryLoginType=AccountPortalPolicy=PersistentThenPortalbDeletePersistentAuthBeforeFallback=true
EOS Connect Login (ProductUserId)
EOS Connect Login (ProductUserId)
├─ WorldContext
├─► OnSuccess → FEOSConnectResult
└─► OnFailure → FEOSConnectResult
Exchanges the Epic Account token for a Product User ID — the player identity used by all game services (Achievements, Stats, Leaderboards).
- If the player is new (first launch), creates their account automatically and fires
OnSuccess. - The Blueprint never needs to handle the "new player" case separately.
Must be called after a successful Auth Login.
Output — FEOSConnectResult:
| Field | Type | Description |
|---|---|---|
ProductUserId | FString | Product User ID on success |
ErrorMessage | FString | EOS error code on failure |
Why two logins? Auth Login = Epic identity (cross-game). Connect Login = your game identity (per-deployment). This separation allows EOS to support Steam, PlayStation, and Xbox accounts alongside Epic accounts in the future.
Achievements
EOS Query Achievements
EOS Query Achievements
├─ WorldContext
├─► OnSuccess → FEOSAchievementsQueryResult
└─► OnFailure → FEOSAchievementsQueryResult
Fetches all game achievements and the local player's progress in a single node.
Internally runs two EOS requests in sequence:
QueryDefinitions— fetches achievement metadata (names, descriptions, icons, hidden status)QueryPlayerAchievements— fetches the player's progress and unlock dates
Both results are merged into a TArray<FEOSAchievementInfo>.
Output — FEOSAchievementsQueryResult:
| Field | Type | Description |
|---|---|---|
Achievements | TArray<FEOSAchievementInfo> | All achievements with player progress |
ErrorMessage | FString | EOS error code on failure |
FEOSAchievementInfo fields:
| Field | Type | Description |
|---|---|---|
AchievementId | FString | Unique ID from Dev Portal |
DisplayName | FString | Name shown when unlocked |
Description | FString | Description shown when unlocked |
LockedDisplayName | FString | Name shown when locked |
LockedDescription | FString | Description shown when locked |
UnlockedDisplayName | FString | Same as DisplayName (alias) |
UnlockedDescription | FString | Same as Description (alias) |
FlavorText | FString | Optional flavor text from Dev Portal |
Progress | float | Player's progress from 0.0 to 1.0 |
bUnlocked | bool | true if confirmed unlocked by Epic's servers |
bIsHidden | bool | true if the achievement is hidden until unlocked |
bRequiresStat | bool | true if the achievement is linked to a stat |
LinkedStatName | FString | Name of the linked stat (if bRequiresStat) |
StatThreshold | int32 | Stat value needed to unlock (if bRequiresStat) |
UnlockTime | FDateTime | Date/time of unlock (valid only if bUnlocked) |
AchievementLockedIcon | UTexture2D* | Icon texture when locked (async-loaded) |
AchievementUnlockedIcon | UTexture2D* | Icon texture when unlocked (async-loaded) |
AchievementIcon | UTexture2D* | Dynamic icon texture (async-loaded) |
AchievementIconUrl | FEOSAchievementIconUrl | Raw icon URLs from Dev Portal |
null for a brief moment after OnSuccess fires. The plugin caches all downloaded textures — repeated queries will use the cache instantly.EOS Unlock Achievement
EOS Unlock Achievement
├─ WorldContext
├─ Achievement [FEOSAchievementInfo]
├─ IngestAmount [int32, default: 1]
├─► OnSuccess → FEOSUnlockResult
└─► OnFailure → FEOSUnlockResult
Unlocks the achievement for the local player.
The unlock method is chosen automatically from the FEOSAchievementInfo you pass:
bRequiresStat | Method used |
|---|---|
false | Direct unlock via EOS_Achievements_UnlockAchievements |
true | Stat ingest via EOS_Stats_IngestStat — EOS unlocks automatically when the threshold is reached |
Parameters:
| Parameter | Type | Description |
|---|---|---|
Achievement | FEOSAchievementInfo | Achievement to unlock — obtained from Query Achievements |
IngestAmount | int32 | Amount to add to the linked stat (only used when bRequiresStat = true) |
Output — FEOSUnlockResult:
| Field | Type | Description |
|---|---|---|
AchievementId | FString | ID of the achievement that was attempted |
ErrorMessage | FString | EOS error code on failure |
Notes:
- If the achievement is already unlocked, EOS still returns
EOS_Success. You do not need to check before calling. - If the
AchievementIddoes not exist in the Dev Portal, EOS returnsEOS_NotFound. - After a successful unlock, the node automatically refreshes the local EOS cache (
QueryPlayerAchievements) so subsequent queries reflect the new state.
EOS Start Achievements Unlocked Listener
EOS Start Achievements Unlocked Listener
├─ WorldContext
├─► OnStarted → FEOSAchievementInfo, bool bSuccess
└─► OnUnlocked → FEOSAchievementInfo, bool bSuccess
Registers a persistent real-time listener that fires OnUnlocked every time an achievement is unlocked for the local player — including unlocks triggered by stat thresholds on the server side.
OnStartedfires once when the listener is successfully registered.OnUnlockedfires each time an achievement is unlocked, with the fullFEOSAchievementInfopopulated.
Stopping the listener:
Call EOS Stop Achievements Unlocked Listener on the node reference to unregister and clean up.
EOS Stop Achievements Unlocked Listener
├─ Target [reference to the listener node]
The listener is also automatically stopped if the node is garbage collected.
Utility Functions (EOSHelpers)
These are C++-only inline helpers available in the EOSHelpers namespace. They are used internally but can also be used in C++ code.
| Function | Returns | Description |
|---|---|---|
EOSHelpers::GetEOS(WorldContext) | UEOSCoreSubsystem* | Gets the subsystem from any UObject |
EOSHelpers::IsEOSReady(WorldContext) | bool | True if initialized |
EOSHelpers::IsEpicLoggedIn(WorldContext) | bool | True if player is logged in |
EOSHelpers::GetProductUserId(WorldContext) | FString | Returns PUID as string |
EOSHelpers::PuidToStr(EOS_ProductUserId) | FString | Converts EOS PUID to string |
Error Codes
Common EOS error codes you may see in ErrorMessage fields:
| Code | Meaning |
|---|---|
EOS_NotFound | AchievementId does not exist in the Dev Portal |
EOS_InvalidUser | ProductUserId is invalid or missing |
EOS_NoConnection | No internet connection |
EOS_TimedOut | EOS servers not reachable |
EOS_Auth_InvalidToken | Persistent token expired — retry with Account Portal |
EOS_InvalidCredentials | Wrong ClientId / ClientSecret in .ini |
For a full list, see the EOS SDK Result Codes reference.