Cross-platform Unity

Port the product, not only the build

Moving a Unity application between WebGL and VR changes how users enter, interact, authenticate, navigate, hear, save and leave the experience. I design the platform boundary and implement the port without turning the shared runtime into conditional code everywhere.

The real differences

One product, different operating realities

The reusable part is the product model. The platform-dependent part must be made deliberate, observable and testable.

ConcernWebGL realityVR/XR realityShared design goal
InputMouse, keyboard, touch, browser focusTracked hands/controllers, poses, hapticsIntent-level actions above device bindings
UIScreen layout and browser viewportWorld-space panels, depth, reach and comfortShared information model, platform presentation
LifecycleBrowser launch, focus, refresh and tab closureHeadset pause, recenter, device removal and resumeExplicit application states and recovery paths
ServicesJavaScript bridge, cookies/tokens, CORS constraintsNative SDKs, device identity and platform storesStable interfaces around platform implementations
PerformanceHeap, download size, browser and device variabilityFrame-time budget, stereo rendering, thermal limitsBudgets measured on each real target

Porting approach

Protect the shared core

The goal is not one giant abstraction. It is a small set of honest boundaries around the platform behaviors that actually differ.

  1. 01

    Inventory platform assumptions

    Find direct SDK calls, static state, input reads, scene dependencies, browser bridges and device-specific UI decisions.

  2. 02

    Define product-level interfaces

    Express what the product needs—authenticate, point, select, pause, persist, play audio—without leaking the platform mechanism.

  3. 03

    Build platform strategies

    Keep implementations small, injectable and observable. Share data and business rules; specialize device behavior and presentation.

  4. 04

    Budget performance per target

    Profile real builds early. Web download and heap constraints are different from VR frame-time and thermal constraints.

  5. 05

    Test transitions, not only features

    Launch, authentication, focus loss, device resume, scene changes, network interruptions and platform switching expose the integration failures.

Delivery scope

Architecture through target validation

A port can be a defined delivery or the entry point to a longer embedded engagement.

01

Technical assessment

Platform inventory, risk map, package and service constraints, target budgets, and a staged porting plan.

02

Runtime adaptation

Input, UI, lifecycle, authentication, persistence, audio, networking and platform strategy implementation.

03

Target hardening

Build validation, profiling, memory and asset work, diagnostics, edge-case recovery and maintainable handover.

WebGL ↔ VR

Planning a platform move—or untangling one already underway?

Tell me the current target, the new target and the part that feels least predictable.