UnityTransport,
and Unity Netcode drives it through the standard INetworkInterface surface.
Configuration is done in the inspector (or in C#), and the public method
surface is UTP’s own — the package forwards it to the QUIC + MoQT substrate.
Install (UPM git URL)
Add the package to your Unity project via Package Manager → Add package from git URL:The package depends on
com.unity.transport (it implements UTP’s
INetworkInterface) and works with both Netcode for GameObjects and
Netcode for Entities. Pin Netcode to a version compatible with your Unity
editor; the transport tracks UTP’s stable interface, not a specific Netcode
release.Swap the transport
In your network manager prefab, removeUnityTransport and add
ClutchCallTransport as the transport component. Unity Netcode discovers it
the same way it discovers UTP, so no other wiring changes.
Replace the transport component
Remove the existing
UnityTransport component and add
ClutchCallTransport. If NetworkManager.NetworkConfig.NetworkTransport
referenced the old component, point it at the new one.Component: ClutchCallTransport
ClutchCallTransport is a NetworkTransport (Netcode) that implements UTP’s
INetworkInterface. It is the only type you reference directly; everything else
is standard Netcode.
Inspector fields
The ClutchCall relay endpoint, e.g.
relay.clutchcall.dev. Players dial the
nearest POP behind this host.The ClutchCall auth token authorizing the QUIC session. Mint a short-lived,
room-scoped token from your control-plane API rather than shipping a static
secret in the build.
The room / match namespace this player joins. Host and clients of the same
match share one
Room Id.Optional pinned certificate hash for the relay’s TLS 1.3 certificate, for
environments that pin instead of using the public trust store.
Upper bound for the unreliable (QUIC datagram) channel. Reads back through
MaxPayloadSize(); payloads larger than this are rejected, not fragmented.Configure from C#
You can set the same fields in code beforeStartHost / StartClient:
UTP method surface
Because the package implementsINetworkInterface, the methods you call are
Unity Netcode / UTP methods — the transport forwards each to the QUIC + MoQT
substrate. The ones that matter for porting:
| UTP / Netcode call | What the transport does |
|---|---|
StartHost() / StartServer() | opens the authority namespace on the relay |
StartClient() | publishes a discovery namespace + per-peer channels, announces to the host |
Send(..., NetworkDelivery) | maps reliable delivery to a subgroup stream, unreliable to a QUIC datagram |
GetCurrentRtt(clientId) | returns the QUIC transport’s smoothed RTT in ms |
MaxPayloadSize() | returns the live max datagram size for the unreliable lane |
DisconnectLocalClient() / DisconnectRemoteClient() | drops the session; the peer leaves every roster via namespace teardown |
Shutdown() | closes the QUIC connection and all tracks |
NetworkDelivery → lane mapping
Unity’sNetworkDelivery enum selects the lane:
NetworkDelivery | Lane |
|---|---|
Reliable, ReliableSequenced, ReliableFragmentedSequenced | MoQT subgroup stream (ordered, guaranteed) |
Unreliable, UnreliableSequenced | QUIC datagram (lossy, latest-wins) |
Events
The transport surfaces connection lifecycle through Netcode’s standard callbacks — you do not subscribe to transport-specific events:| Netcode callback | Fires when |
|---|---|
NetworkManager.OnClientConnectedCallback | a peer’s discovery namespace is announced and accepted |
NetworkManager.OnClientDisconnectCallback | a peer’s session drops / namespace tears down |
NetworkManager.OnServerStarted | the authority namespace is open |
NetworkManager.OnTransportFailure | the QUIC session fails unrecoverably |
Non-Unity engines
The Unity component is a thin wrapper over a shared C++ star session (host + N peers with reliable + unreliable + discovery). To integrate a non-Unity engine you implement a handful of engine-side hooks — discovery, RTT, max-datagram, capture-time telemetry, and the datagram-lane mapping — and reuse the rest of the session machinery. For a fully typed, language-native surface (TypeScript / Python / Go / Rust / Java / C#) without Unity, use the Games SDK, which exposes the samestate / input / event channels directly.
- TypeScript
- Python
Related
Cookbook
Copy-paste snippets for the common porting tasks.
Games SDK
The typed, non-Unity surface for the same wire model.

