VRCAnalyticsDocsDashboard →

Zone heatmaps

Track which regions of your world players actually visit.

Zones let you track entries, exits, and dwell time for named regions of your world — spawn areas, rooms, VIP sections, boss arenas, whatever makes sense. Each zone is a BoxCollider you name in Unity; the beacon reports enter/exit events server-side.

Setup

  1. In Unity, run VRCAnalytics → Add Zone Heatmap. This creates a VRCAnalytics Zones empty GameObject in your scene.
  2. Create empty child GameObjects under it — one per zone. Give each a descriptive name (the name is the zone ID in analytics).
  3. Add a BoxCollider to each child and shape it to cover the region.
  4. Select the VRCAnalytics Zones parent. Drag each child into the Zones array on its VRCAnalyticsZoneBeacon component.
  5. Click Build & Publish. The build hook auto-sets Is Trigger = true on each collider and pre-bakes per-zone URLs.
Unity Hierarchy showing VRCAnalytics Zones parent with 4 named child GameObjects, and the 3D scene view with BoxColliders
Parent with child zones and their BoxColliders in the scene.
Inspector showing the VRCAnalyticsZoneBeacon component with child zones in the Zones array
The Zones array populated with your child GameObjects.

How detection works

The zone beacon polls the local player's position ~12 times per second and checks each zone collider via Bounds.Contains(playerPosition). Transitions (inside → outside or vice versa) fire a zone_enter or zone_exit event. No event fires while the player stays inside a zone.

Axis-aligned boxes work best

Because we use bounds (axis-aligned), rotated BoxColliders will detect slightly outside their visual corners. For most worlds — rectangular rooms aligned to world axes — this is imperceptible. If you need precise shapes, keep your box rotation at 0 or split large rooms into multiple axis-aligned zones.

Overlapping zones

Zones are allowed to overlap. A player inside two overlapping colliders counts toward both, which is intentional — lets you model nested areas or tagged regions:

  • Nested: first_floor contains lobby, hallway, bathroom. A player in the lobby is also on the first floor. Both metrics are meaningful.
  • Tagged: vip_section overlapping main_stage lets you count "VIP attendees who watched the show" as the overlap.

If you want zones to be mutually exclusive, just keep the colliders from touching. The summed currently_in across overlapping zones can exceed the world's total online count — this is expected.

Session-aware "online now"

The "Online now" column uses zone_enter events within the last 15 minutes, filtered to sessions that haven't sent a leave event yet. When a player disconnects from VRChat (normal leave), their zone presence clears immediately. If a player crashes and no leave event fires, their zone state ages out after 15 minutes.

Limits

  • Free plan: 2 zones per world
  • Pro plan: 10 zones per world
  • Pro+ plan: 20 zones per world

Plans aren't live yet

During beta, zone count isn't enforced. These limits activate when paid plans launch.