@enfinitos/sdk-gaming
EnfinitOS SDKs for the GAMING substrate. Three per-engine sibling implementations:
| Path | Engine | Language | Status |
|---|---|---|---|
unity/ | Unity 6 LTS (6000.x) | C# | full |
unreal/ | Unreal Engine 5.5+ | C++ | full |
godot/ | Godot 4.4+ | GDScript 2.0 | full |
2026 platform notes
Unity
- Unity 6 LTS (Unity 6000.x stream, released 2024). The SDK ships as a UPM package (
com.enfinitos.gaming). UnityEngine.Awaitablefor the public async surface — Unity 6's in-engine async primitive that integrates with the main- thread dispatcher. Task interop viaAwaitable.AsTask().- UnityWebRequest for HTTP — no third-party HTTP client (avoid IL2CPP build issues with HttpClient / Newtonsoft).
- Compatible with: Universal Render Pipeline (URP), High Definition Render Pipeline (HDRP), the Built-in Pipeline. The SDK does not require any specific render pipeline.
- Editor support: drag-drop
InGameAdSurfaceMonoBehaviour via GameObject menu; custom inspector surfaces brand-safety verdict + viewability state.
Unreal Engine
- UE 5.5+ is the supported floor. UE 5.4 added the
UE::Tasks::TPromiseframework the SDK builds on; UE 5.5 promoted it to the recommended async path. The SDK does NOT use the legacyOnProcessRequestCompletedelegate pattern. - Nanite + Lumen + MetaHuman are mainstream — the SDK doesn't require them but is designed not to break them. In particular the
InGameAdSurfacecomponent doesn't overrideGetActorBoundsin a way that would interfere with Nanite's per-cluster culling. - C++20 is the language standard (UE 5.5 minimum). The SDK uses concepts + coroutine-style
co_awaitonTPromises. FHttpModulewraps the actual HTTP requests. The async surface isUE::Tasks::TTask-based.- Compatible with: all UE platforms (Win64, Linux, Mac, iOS, Android, PS5, XSX) — listed in the
.upluginmanifest.
Godot
- Godot 4.4 LTS+ (mid-2025) is the supported floor. The 3.x line is not supported.
- GDScript 2.0 — typed signals (
signal foo(value: int)), typed parameters + return types,async/awaitfor HTTP. - The plugin registers a custom
InGameAdSurfacenode in the editor; designers drag-drop it onto their scenes. - HTTPRequest is the supported HTTP path; the SDK does not pull in third-party Godot addons.
In-game ad surface model
The SDK models in-game ad surfaces as 3D geometric primitives with affordances:
- Billboard — flat quad (stadium ad, virtual TV).
- Wrapped — texture on a curved surface (logo on a can).
- Volumetric — full 3D mesh replacement (the platform's asset replaces the host's placeholder prop).
- Audio — non-visual; in-game radio insertion, NPC dialogue.
The platform's resolve scoring picks an asset whose geometry + MIME matches the surface. Each SDK exposes:
EnfinitOSGamingClient— top-level orchestrator (StartAsync,FetchAdAsync,Report*Async).InGameAdSurface— host-attached component (MonoBehaviour / USceneComponent /MeshInstance3Dsubclass).ViewabilityScorer— IAB Gaming SIG 2024 scorer.ProofReporter—/runtime/event-ingestwire glue.
IAB Gaming SIG 2024 viewability
All three SDKs implement the same spec:
| Threshold | Billboard | Wrapped | Volumetric | Audio |
|---|---|---|---|---|
| Coverage | ≥ 50% | ≥ 50% | ≥ 50% | n/a |
| Viewing angle | ≤ 30° | ≤ 60° | ≤ 30° | n/a |
| Dwell | ≥ 2000ms | ≥ 2000ms | ≥ 2000ms | ≥ 2000ms |
| Gaze on surface | required | required | required | replaced by "audible" |
References:
- IAB Tech Lab: "Measurement of Ad Inventory in 3D Spatial Environments" (Oct 2024).
- MRC Viewable Ad Impression Measurement Guidelines (revised 2024 for in-game inclusion).
- IAB Gaming SIG "In-Game Ad Format Taxonomy" (Mar 2024).
Brand-safety enforcement
Each resolved asset carries a ContentConstraintVerdict from the platform's Rights module. Host games:
- Trust the verdict at resolve time (the platform's resolve blocks anything the operator's constraints disallow).
- Re-check post-resolve if the scene state changes (the player drove into a war zone after the ad was resolved). The host calls
surface.Dismiss()to drop the asset; the SDK reports adismissedevent.
The Unity Editor extension surfaces the verdict in the inspector so designers can see at edit-time whether an ad surface is brand-safe in a given scene.
Steamworks integration
Out of scope for this Tranche. Steamworks ships its own SDK and ad mediation; integrating EnfinitOS with Steamworks happens at the publisher's platform-integration layer, not in this SDK. The Unity SDK is compatible with games shipping to Steam — the SDK doesn't conflict with the Steamworks plugin — but no Steam-specific helpers are bundled here.
Endpoint surface
| SDK call | Platform endpoint | Status |
|---|---|---|
FetchAdAsync | POST /runtime/resolve + POST /runtime/grant with substrate: "GAMING" | existing |
ReportImpressionAsync / Viewable / Interaction | POST /runtime/event-ingest | existing |
ContentConstraintVerdict (returned from resolve) | platform's Rights module evaluation | existing |
| Brand-safety re-check post-resolve | client-side; no extra endpoint | n/a |
30-line minimum-viable integrations
Each engine's canonical client file opens with a 30-line copy-paste sample:
- Unity:
unity/Runtime/EnfinitOSGaming.cs - Unreal:
unreal/Source/EnfinitOSGaming/Public/EnfinitOSGamingClient.h - Godot:
godot/addons/enfinitos_gaming/EnfinitOSGaming.gd