menu_bookDocumentation
Network Visibility: Culling and INetworkVisible Interface
Network Visibility controls whether a networked object sends updates (Sync Vars, Transform) to a specific player. By default, all networked objects always transmit to all connections.
Always Transmit (Default)
Every networked object has AlwaysTransmit = true by default. The object is visible to every player and never culled.
Custom Visibility with INetworkVisible
Implement Component.INetworkVisible on the root GameObject to control per-connection visibility:
CSHARP
public class MyVisibility : Component, Component.INetworkVisible
{
public bool IsVisibleToConnection( Connection connection, in BBox worldBounds )
{
// Example: only visible within 5000 units
var playerPos = connection.GameObject?.WorldPosition ?? Vector3.Zero;
return worldBounds.Center.Distance( playerPos ) < 5000f;
}
}Only the owner decides visibility. Disable AlwaysTransmit on the root network object to enable this.
Hammer PVS Fallback
If no INetworkVisible component exists and the map is a Hammer map with VIS compiled, the engine automatically uses PVS (Potentially Visible Set) for visibility.
What Happens When Culled
When an object is NOT visible to a connection:
Stops being sent:- Sync Var updates
- Transform updates
- Object still spawns for the client
- Object becomes Disabled locally while hidden
- RPCs are still delivered
Was this helpful?