World Streaming multiplayer
Optional WorldStreaming.Multiplayer synchronizes cell and layer interest between dedicated server and clients. Server shards (authority ownership) are not the same as
editor collaboration shards.
Integration checklist
- Build with the Multiplayer Gem present so
WorldStreaming.Multiplayercompiles. - Place
WorldStreamingSyncNetworkComponenton the networked player Prefab. Without it, clients do not receive activation authority. - Ship the same Manifest on server and clients (
worldGuid+manifestVersion+contentHashhandshake). Mismatch → reject; client gets zero authorized cells. - Configure authority mode, interest CVars, and optional server shards.
Server authority modes
Runtime/ServerAuthority | Semantics |
|---|---|
ServerDriven (default) | Local client sources may warm cells only up to Loaded; Activated requires server authorization |
ClientPredicted | Clients may load/activate static content themselves; networked entities remain server-authoritative |
Query from script: IsServerAuthorityEnforced / GetServerAuthorizedCellCount.
State sync and interest
The sync component carries cell / layer state server → client. The server filters relevant cells by interest:
| CVar / setting | Default | Role |
|---|---|---|
sv_worldStreamingInterestUpdateMs | 250 ms | Interest refresh period |
sv_worldStreamingInterestRadius | 512 m | Interest radius |
sv_worldStreamingPeriodicSnapshotPushes | 20 | Periodic snapshot pushes |
ws_entityCellRefreshMs | 0 (off) | Entity→cell refresh |
ws_gateReplicatedEntitiesOnCellLoaded | false | Gate replication on cell Loaded |
m_maxReplicatedEntitiesPerConnection / m_perCellReplicationBudget | 0 / 0 | Replication budgets (0 = off) |
FilterForcedRelevantByCell | false |
Replication-load gate: unexpected / Failed / HLOD cells always pass (no deadlock). Client NetworkEntityTag alias Disable: networked entities arrive only via replication.
Network instantiation modes
Runtime/NetworkInstantiationMode:
| Value | Semantics |
|---|---|
StaticAliasAutoInstantiate (default) | Replace-alias auto-spawns networked entities |
ExplicitNetSpawn | Explicit network spawnable; spawn = activate (single tier) |
ExplicitImmediateSpawn | CreateEntitiesImmediate(DoNotActivate); supports two-tier activation + double-precision anchors |
Server residency
Runtime/ServerStreamingMode: StreamInOut (default) / StreamInOnly / FullyResident.
Server shards (multi-authority)
Distinct from editor shards:
- Set
.wsworldm_shardSize> 0 at bake time. - Configure
OwnedShardCoordsin setreg (for example"0,0;1,0"). - Set
ws_installCellEntityDomainOnHost = trueon hosts that own cells. sv_worldStreamingShardAuthorityUpdateMsdefault 500 ms.
Query: GetCellShardAtPosition / IsCellOwnedByThisServerAtPosition (script) or C++ GetCellShard / IsCellOwnedByThisServer.
Content Layer network roles
Layers may be ClientOnly or ServerOnly and are clamped by the local network role. See
Content Layers.
Content Bundles in multiplayer
Mount state is not in the handshake. ServerDriven clients should mount the same bundles as the server. Chunked roots cannot mount bundles (v1).
Next steps
- Scripting: multiplayer query events.
- Configuration and debugging: full CVar table.