Tracker Options Window

The Tracker Options Window can be opened from the cognitiveVR menu


If you do not have a CognitiveVR_Manager prefab in your scene, you will be prompted to add one.

Tracker Options



These scripts are intended for easy implementation and these try to make few assumptions about your project. You should review these scripts and simplify/optimize in ways specific to your project's needs. This page gives you a high level overview about these scripts.


The CognitiveVR_Manager prefab can be added to your project to connect to the cognitiveVR analytics server. CognitiveVR_Manager must be Initialized before you can send analytics data. By default, this happens on Start().

DeviceInfo is automatically collected. It includes:

  • Application name, version and platform
  • Operating System
  • Graphics Card name, vendor and memory
  • Processor type
  • System memory
  • Display model and family

This script also contains the logic for capturing the player's hmd position and world gaze point.

Analytics Tracker Components

Arm Length

Collects distances from the HMD to the player's controller. The maximum is assumed to be roughly the player's arm length. This only starts tracking when the player has pressed the Steam Controller Trigger or any button on Oculus Touch.

Battery Level

Send the battery level of an Android device after initialization and on quit. This requires building the product to an android device.

Boundary Event

Sends a transaction when SteamVR Chaperone or Oculus Guardian becomes visible and becomes hidden.


Sends a transaction when framerate falls below a threshold. This threshold is set in CognitiveVR_Preferences. Can send a basic comfort score (FPS + Average HMD rotation rate) on an interval.

Controller Collision Event

Sends transactions when either controller collides in the game world. Collision LayerMask can be set in the Tracker Options Window.

Controller Input Event

If you are using SteamVR, Controller Input Event assumes you are using a SteamVR_TrackedController component.

Sends a transaction when common controller inputs occur, specifically TriggerClicked, TriggerUnclicked, Gripped, Ungripped and PadClicked.

Sending transactions for very common events may not be helpful, depending on what you are trying to learn from your data. For example, it may be easier to send one transaction at the end of a level to see how many times a specific input occurred. This component could be more valuable if, for example, you are trying to determine if certain gestures are difficult for some players to perform.

HMD Collision Event

Sends transactions if the HMD collides with something in the game world. Collision LayerMask can be set in the Tracker Options Window.

HMD Height

Samples the height of a player's HMD. Average is assumed to be player's eye height. Requires Oculus, SteamVR or Fove

HMD Present Event

Sends transactions when a player removes or wears their HMD.

The SteamVR HMD proximity sensor seems to have a delay of 10 seconds when removing the HMD. This has been accounted for in the transaction, but this component may miss events when the player quickly removes and replaces their HMD.

Headphone State

Check if the user has headphones connected. This currently only works with Oculus Utilities on Android

Issue Reporter

Enable a console that can send user-created notes to SceneExplorer. This could be extended to send bug reports to Jira or other bug tracker software. Since this is using OnGUI and requires a keyboard for input, it is not recommended to be used outside of development!

Occlusion Event

Sends transactions when a tracked device (likely a controller, but could also be headset or lighthouse) loses visibility (visible) or is disconnected/loses power (connected).

Recenter Event

Sends transaction when the HMD recenters. This is usually caused by calling UnityEngine.VR.InputTracking.Recenter(). Requires Oculus Utilities.

Room Size

Include SteamVR Chaperone Room Size or Oculus Guardian Size in Device Info.

Screen Resolution

Include Screen Resolution in Device Info. Probably only useful for mobile.

Steamworks User

Create a unique user from plugin. This requires you to uncomment the example code in the script. The cognitiveVR SDK does not ship with this package; it is available here

UserInfo is a unique identifier to track the player. It is optional, but by providing a value, you can slice your data and see how a user's experience changes over their course of using your product.

Teleport Event

Sends a transaction when a player's HMD root transform changes positions. This is not triggered when the player walks while using roomscale. If the player moves without an immediate teleport, do not use this component!

Gaze Object

The Gaze Object script can be added to any GameObject in the scene to determine if the player is looking at this GameObject. This can be useful for determining if the player is paying attention to a specific object (such as a tutorial sign). This can also be useful during A/B testing.

On the Gaze Object component, there is a field for a unique Gaze Object Name to identify this object on the cognitiveVR dashboard, a field for the Maximum Angle to allow some inaccuracy in the camera's direction and a toggle to Check Line of Sight. If Maximum Distance is > 0, it allows you to ignore the player's gaze if it they are beyond this distance.

Note how no Transactions are sent if the player has not looked at the Gaze Object. Also note how the Gaze Object sends the duration the player has looked at this object infrequently. These are two ways of reducing the number of HTTPRequests. Although this is fast, sending Transactions every frame will have a clear performance impact!

The interval in which each Gaze Object duration is sent is 10 seconds.