Unreal Engine SDK integration
Follow one path through installation, project configuration, game instrumentation and delivery verification. Sessions, hardware context and aggregated network quality are automatic by default; runs, progression, matchmaking and game-specific signals stay explicit.
01–02
Download and install the plugin
The archive is the complete plugin directory; no installer is required.Download
Download the current stable GlessTelemetry.zip.
Copy into the project
Extract to YourProject/Plugins/GlessTelemetry
Enable and restart
Regenerate project files, enable G-Less Telemetry in Plugins, then restart the Editor.
03
Connect your project
Add the project ID, append-only write key and release channel to DefaultGame.ini. The endpoint always uses g-less.com.No project yet? Create one first; G-Less will generate a one-time write key and return you here.
Create or select a project[GlessTelemetry]
EnabledByDefault=true
CapturePlatformAccountId=true
Endpoint="https://g-less.com/api/v1/telemetry/ingest"
ProjectId=YOUR_PROJECT_UUID
WriteKey=gls_pk_YOUR_WRITE_KEY
Channel=demo
BuildId=YOUR_GAME_BUILD
HeartbeatSeconds=30
FlushSeconds=5
CombatSummarySeconds=15
NetworkSummarySeconds=30Channel
demo · playtest · retail · developmentBuildId
Unique for every real buildWriteKey
Append-only; cannot read analytics04
Instrument the game meaning that matters
The SDK handles launch, hardware context, network quality, heartbeat and shutdown automatically. Mark runs, progression, outcomes, matchmaking and custom signals only at stable game boundaries.UGlessTelemetrySubsystem* Telemetry =
GetGameInstance()->GetSubsystem<UGlessTelemetrySubsystem>();
// One application session can contain multiple runs.
Telemetry->StartRun(TEXT("standard"));
Telemetry->TrackProgression(TEXT("tutorial"), TEXT("complete"), 1.0f);
Telemetry->EndRun(TEXT("completed"), FinalScore);// Categories and modes are defined by your game.
Telemetry->TrackMatchmakingAttemptWithCategory(
TEXT("cooperative"), TEXT("quick_match"), PartySize);
TMap<FString, float> Numbers{{TEXT("depth_m"), CurrentDepth}};
Telemetry->TrackCustomEvent(TEXT("digging_progress"), {}, Numbers, {});// Emit these after the authoritative game action resolves.
Telemetry->TrackResourceTransaction(TEXT("sink"), TEXT("gold"), Price,
TEXT("shop_purchase"), TEXT("weapon"), WeaponId, GoldAfter);
Telemetry->TrackUpgrade(UpgradeId, TEXT("tool"), OldLevel, NewLevel,
TEXT("success"), TEXT("gold"), Price);
Telemetry->TrackChestOpened(ChestType, Tier, TEXT("quest_reward"),
TEXT("opened"), ItemCount, TEXT("gold"), GoldReward);
Telemetry->TrackQuest(QuestId, TEXT("daily"), TEXT("completed"), 1.0f);
// These calls only update bounded in-memory counters; they do no I/O.
Telemetry->TrackDamageDealt(AppliedDamage, bCritical, bHit);
Telemetry->TrackDamageTaken(AppliedDamage);
Telemetry->TrackEnemyKilled(bElite, bBoss);
Telemetry->TrackPlayerDeath(TEXT("enemy_damage"), EnemyCategory);Application session
Automatic launch-to-exitDevice context
Hardware, language, display and RHIRun
StartRun → EndRunMatchmaking
Attempt, result, wait, partyGame systems
Economy, progression, combat and loss05
Verify the first event before expanding instrumentation
Prove the smallest path first, then add gameplay events so failures stay easy to isolate.- 1Start PIE in the Editor and search Output Log for G-Less.
- 2Open Live events and select Editor / Development.
- 3Confirm app_started or session_start arrives, then test one run.
- 4Run offline, close, restore the network and relaunch to verify queued delivery.
- 5Finally test a packaged build and switch back to the player-build filter.
Runtime safety contract
UE HTTP is asynchronous; gameplay never waits for a response.
Hits, damage and kills only update memory counters and upload one 15-second summary.
Offline events use a bounded local queue and replay on a later launch.
Unavailable Steam identity falls back to an anonymous install ID without blocking or crashing.
After opt-out, public calls become no-ops and unsent data is removed asynchronously.