Analytics for Unity, Godot and Unreal web exports
Unity, Godot and Unreal web exports compile to WebAssembly and render into a <canvas>, so there’s no
JavaScript scene for an analytics tool to read. Uptimizr handles this in two tiers: a JavaScript tier
that works immediately with no engine changes, and a bridged tier that adds world-space data through a
small shim you copy into your project.
What each tier captures
Section titled “What each tier captures”| Tier | Engine code? | What you get |
|---|---|---|
| JS-only | None | Pointer and click heatmaps, FPS and long frames, opt-in JS errors |
| Bridged | A small copy-in shim | Camera pose and view-direction heatmaps, world-space picks, scene proxy, replay |
Start with the JS-only tier. It tells you whether people engage with the export and how it performs, and you can add the bridge later if you need to know what they looked at.
Support by engine
Section titled “Support by engine”| Engine | Package | Status | Bridged tier |
|---|---|---|---|
| Unity WebGL | @uptimizr/unity |
Beta | Preview, using a .jslib plugin and a small MonoBehaviour |
| Godot 4 (web) | @uptimizr/godot |
Beta | Available through a copy-in shim |
| Unreal (web) | @uptimizr/unreal |
Alpha | Best-effort, for experimental or community web exports |
Unreal needs extra care: Epic has no official UE5 HTML5 or WebAssembly target, and Pixel Streaming runs on a server, so there’s no client-side scene to read. The JS-only tier works with any Unreal canvas, while the bridged tier targets community and experimental Emscripten exports. See the Unreal page for the toolchains involved.
Add the JS-only tier
Section titled “Add the JS-only tier”Start the connector on the page that hosts your export, before the export boots. This Unity example
looks the same for trackGodot and trackUnreal:
npm install @uptimizr/unityimport { trackUnity } from "@uptimizr/unity";
const { client, bridge } = trackUnity({ projectId: "your-project", endpoint: "https://collect.example.com", canvas: () => document.querySelector("#unity-canvas"),});Data starts flowing straight away. The endpoint is a collector you run yourself.
Add the bridged tier
Section titled “Add the bridged tier”The bridge is a copy-in asset, not a package, and it does no coordinate maths. It sends your engine’s own world-space values to the connector, which normalizes them. For Unity:
- Copy
Uptimizr.jslibtoAssets/Plugins/WebGL/in your project. - Copy
UptimizrUnityBridge.csunderAssets/and add the component to a GameObject. - Make sure
trackUnity(...)runs on the host page before the export starts.
See the setup for Unity, Godot and Unreal.
Other WebAssembly engines
Section titled “Other WebAssembly engines”If your engine renders to a <canvas> from WebAssembly, you can use the shared
@uptimizr/web-export foundation directly. You supply the engine’s
native coordinate frame and get both tiers.
Next steps
Section titled “Next steps”- Read about web exports and the bridge contract.
- Follow Run the collector to self-host the backend.
- Explore the reports in the live demo.