Similar to this thread Accessing EyeTracking Device on Hololens 2 , I am trying to use the eye tracking API to get the fixation point. When i list the devices, like in the previously mentioned Thread, I get “name:Head Tracking - OpenXR, role:Generic, manufacturer:OpenXR, caracteristics:HeadMounted, TrackedDevice”.
The thing is that i can access the individual eye position and rotation by using:
if (TryGetPosition(UnityEngine.XR.CommonUsages.leftEyePosition, XRNode.LeftEye, out var leftEyePosition)
&& TryGetRotation(UnityEngine.XR.CommonUsages.leftEyeRotation, XRNode.LeftEye, out var leftEyeRotation)
&& TryGetPosition(UnityEngine.XR.CommonUsages.rightEyePosition, XRNode.RightEye, out var rightEyePosition)
&& TryGetRotation(UnityEngine.XR.CommonUsages.rightEyeRotation, XRNode.RightEye, out var rightEyeRotation))
{
Debug.Log(string.Format("Left Eye Rotation2:{0} , Position2:{1}", leftEyeRotation, leftEyePosition));
Debug.Log(string.Format("Right Eye Rotation2:{0} , Position2:{1}", rightEyeRotation, rightEyePosition));
}
bool TryGetPosition(InputFeatureUsage<Vector3> inputFeatureUsage, XRNode node, out Vector3 position)
{
UnityEngine.XR.InputDevice device = InputDevices.GetDeviceAtXRNode(node);
if (device.isValid)
{
if (device.TryGetFeatureValue(inputFeatureUsage, out position))
return true;
}
position = default;
return false;
}
bool TryGetRotation(InputFeatureUsage<Quaternion> inputFeatureUsage, XRNode node, out Quaternion rotation)
{
UnityEngine.XR.InputDevice device = InputDevices.GetDeviceAtXRNode(node);
if (device.isValid)
{
if (device.TryGetFeatureValue(inputFeatureUsage, out rotation))
return true;
}
rotation = default;
return false;
}
That is why i am wondering why i can still not access the Eyes Struct since TryGetFeatureValue in :
bool TryGetEyes(out Eyes eyes)
{
UnityEngine.XR.InputDevice device = InputDevices.GetDeviceAtXRNode(XRNode.CenterEye);
if (device.isValid)
{
Debug.Log(string.Format("name:{0}, role:{1}, manufacturer:{2}, characteristics:{3}, serialNumber:{4},",
device.name, device.role, device.manufacturer, device.characteristics, device.serialNumber));
if (device.TryGetFeatureValue(UnityEngine.XR.CommonUsages.eyesData, out eyes))
return true;
}
eyes = default;
return false;
}
always returns false.
Since there isn’t any indication in the documentation (see Unity - Manual: Unity XR Input under “Accessing eye-tracking data”) that this shouldn’t work I am kind of confused.
Is the Eyes Struct currently just not accessible and do I have to work with the individual eye position or am I perhaps missing something else to access the Eyes struct.