Core

Table of Contents

TobiiXR

TobiiXR is the entry point that exposes focused objects and provides access to core eye tracking data.


TobiiXR.Start(TobiiXR_Settings)

The Start() function initializes TobiiXR according to the provided settings object (see Tobii XR Settings). This function only needs to be called once per application. If you are using the TobiiXR Initializer prefab this function is already being called for you. If you want to change configuration of TobiiXR after it has started, first call Stop(). If Start() is called again without first calling Stop(), the call will fail.

If you access data from TobiiXR without calling Start(), TobiiXR will automatically initialize, but this will introduce a startup latency in the first call. If Start() has not been called, G2OM will not start, and the IGazeFocusable interface will not be called.

Example

This example shows how to manually initialize TobiiXR from your own bootstrapper using only code. Ensure this script is executed before any scripts that are using TobiiXR.

using Tobii.XR;
using UnityEngine;

public class MyBootstrapper : MonoBehaviour
{
    void Awake()
    {
        var settings = new TobiiXR_Settings();
        settings.FieldOfUse = FieldOfUse.Interactive;
        TobiiXR.Start(settings);
    }
}

TobiiXR.Stop()

The Stop() function closes the connection to the eye tracker and shuts down G2OM.


TobiiXR.FocusedObjects

This property gives you access to a list of the latest candidates being focused on as determined by G2OM. The list is sorted by the likelihood that this is the object you are focusing on. The list will be empty if no object are considered to be focused. A FocusedCandidate contains the hit GameObject as well as information about the ray which hit the GameObject.

Example

This example shows how to create a Component that retrieves the currently focused object every frame.

public class FocusManager : MonoBehaviour
{
    private void Update()
    {
        // Check whether TobiiXR has any focused objects.
        if (TobiiXR.FocusedObjects.Count > 0)
        {
            var focusedGameObject = TobiiXR.FocusedObjects[0].GameObject;
            // Do something with the focused game object
        }
    }
}

Only GameObjects containing at least one component implementing the IGazeFocusable interface will appear in the FocusedObjects list.

The IGazeFocusable component attached to your focusable game objects will also be notified whenever it gains or loses focus.

Example

This example shows how to create a Component that will be called every time the GameObject gains or loses focus.

using Tobii.G2OM;

public class HighlightAtGaze : MonoBehaviour, IGazeFocusable
{
    //The method of the "IGazeFocusable" interface, which will be called when this object receives or loses focus
    public void GazeFocusChanged(bool hasFocus)
    {
        //This object either received or lost focused this frame, as indicated by the hasFocus parameter.
    }
}

TobiiXR.GetEyeTrackingData(TobiiXR_TrackingSpace)

Gets the eye tracking data captured at the start of the Update phase.

Parameters

Determines in what TobiiXR_TrackingSpace the data will be returned. The following values are supported:

Name Description
Local The local eye tracking space shares origin with the XR camera. Data reported in this space is unaffected by head movements and is well suited for use cases where you need eye tracking data relative to the head, like avatar eyes.
World World space is the main tracking space used by Unity. Eye tracking data in world space uses the same tracking space as objects in your scene and is useful when computing what object is being focused on by the user.

Returns

Definition of TobiiXR_EyeTrackingData:

Name Type Description
Timestamp float The timestamp for when the data was received, measured in seconds since application start.
ConvergenceDistance float The distance along the combined gaze ray where the eyes converge, measured in meters. For most eye tracking systems, the accuracy of this signal is low at distances of more than 1 meter.
ConvergenceDistanceIsValid bool The validity of ConvergenceDistance. Do not use the value of ConvergenceDistance if this is false.
GazeRay TobiiXR_GazeRay Struct containing the gaze ray for left and right eye combined.
IsLeftEyeBlinking bool Value indicating if the left eye is closed (true) or open (false).
IsRightEyeBlinking bool Value indicating if the right eye is closed (true) or open (false).

Definition of TobiiXR_GazeRay:

Name Type Description
Origin Vector3 The origin point of the gaze ray.
Direction Vector3 The normalized direction vector for the direction of the gaze ray.
IsValid bool The validity of the TobiiXR_GazeRay. Do not use Origin or Direction of this data if this is false.

Any data where the validity bool, e.g. ConvergenceDistanceIsValid or TobiiXR_GazeRay.IsValid is false, should not be used.

Example

With TobiiXR.GetEyeTrackingData(TobiiXR_TrackingSpace) you can directly get access to the latest data from the eye tracker device in one of the available tracking spaces.

private void Update ()
{
    // Get eye tracking data in world space
    var eyeTrackingData = TobiiXR.GetEyeTrackingData(TobiiXR_TrackingSpace.World);

    // Check if gaze ray is valid
    if(eyeTrackingData.GazeRay.IsValid)
    {
        // The origin of the gaze ray is a 3D point
        var rayOrigin = eyeTrackingData.GazeRay.Origin;

        // The direction of the gaze ray is a normalized direction vector
        var rayDirection = eyeTrackingData.GazeRay.Direction;
    }

    // For social use cases, data in local space may be easier to work with
    var eyeTrackingDataLocal = TobiiXR.GetEyeTrackingData(TobiiXR_TrackingSpace.Local);

    // The EyeBlinking bool is true when the eye is closed
    var isLeftEyeBlinking = eyeTrackingDataLocal.IsLeftEyeBlinking;
    var isRightEyeBlinking = eyeTrackingDataLocal.IsRightEyeBlinking;

    // Using gaze direction in local space makes it easier to apply a local rotation
    // to your virtual eye balls.
    var eyesDirection = eyeTrackingDataLocal.GazeRay.Direction;
}

TobiiXR.Internal

For advanced and internal use only. Do not access this field before TobiiXR.Start has been called.

Do not save a reference to the fields exposed by this class since TobiiXR will recreate them when restarted.