viewculling

View Culling (Client LOD)

Client-side distance tiers over entity views: full detail near, animator pose-write culling in the mid ring, deactivation beyond. Whatever the game spawns gets culled and the layer never knows what the objects are. No server half and no wire — usable on its own, including by a client that only moves a camera.

Category Spatial Unity types 2
Unity package
com.crossplay.culling
Depends on
world
Shape
client-only · no server half

Unity seams you implement 2

The client half's sockets. Bind your implementation in the client context and Crossplay's client calls it — this is where your models, animators, UI and controls plug in.

ICullingClient unity SPI

The client culling layer: assigns every world entity view a distance tier from the local player and (by default) applies the built-in actions — full detail near, animator pose-write culling in the mid ring, deactivation beyond. It never knows what a view IS; whatever the game spawns gets culled. Remove the package (or disable it in options) and every view stays full detail.

  • event Action<WorldEntityView, int> TierChanged

    A view moved to another tier (see CullingTier). Games hook their own LOD reactions here.

  • int CountFull

    Views currently at full detail.

  • int CountReduced

    Views currently in the reduced ring.

  • int CountCulled

    Views currently culled (deactivated).

ICullingOrigin unity SPI

OPTIONAL seam: where the culling layer measures distance FROM. Unbound (the default), the origin is the local player's own avatar transform, exactly as it has always been. Bind it when the local player's viewpoint is not where their own avatar's transform is — a seated driver whose avatar is parked while the vehicle they steer travels (CNC-07), a spectator following another entity, a camera-led strategy view. Returning false hands the origin back to the avatar for that scan, so an implementation only answers while its situation holds. Consulted once per scan (ScanIntervalSeconds), never per view; an implementation must not allocate.

  • bool TryGetOrigin(out Vector3 origin)

    The point to measure tiers from right now, when this source has one.