在 Unity 脚本中访问眼动跟踪数据 - MRTK2

本文假设读者已了解如何在 MRTK 场景中设置眼动跟踪(请参阅使用眼动跟踪所需的基本 MRTK 设置)。 在 MonoBehaviour 脚本中访问眼动跟踪数据非常简单! 使用 CoreServices.InputSystem.EyeGazeProvider 即可。

IMixedRealityEyeGazeProvider

MRTK 中的眼动跟踪配置通过 IMixedRealityEyeGazeProvider 接口进行配置。 使用 CoreServices.InputSystem.EyeGazeProvider 在运行时提供在工具包中注册的默认注视提供程序实现。 下面概述了 EyeGazeProvider 的有用属性。

  • IsEyeTrackingEnabled:如果用户已选择在注视时使用眼动跟踪,则为 true。

  • IsEyeCalibrationValid:指示用户的眼动跟踪校准是否有效。 如果值尚未从眼动跟踪系统接收数据,则返回“null”。 它可能无效,因为用户跳过了眼动跟踪校准。

  • IsEyeTrackingEnabledAndValid:指示当前眼动跟踪数据当前是否用于注视。

  • IsEyeTrackingDataValid:如果眼动跟踪数据可用,则为 true。 它可能由于超过超时时间而不可用(但应该能够抵御用户眨眼),或缺少跟踪硬件或权限。 查看缺少眼部校准通知示例,该示例说明如何检测用户是否经过眼部校准,并显示相应的通知。

  • GazeOrigin:视线的原点。 请注意,如果“IsEyeGazeValid”为 false,则将返回头部注视原点。

  • GazeDirection:视线的方向。 如果“IsEyeGazeValid”为 false,将返回头部注视方向。

  • HitInfo、HitPosition、HitNormal 等:有关当前注视目标的信息。 同样,如果 IsEyeGazeValid 为 false,则将基于用户的头部。

使用 CoreServices.InputSystem.EyeGazeProvider 的示例

下面是 FollowEyeGaze.cs 中的示例:

  • 获取用户正在注视的全息影像点:
// Show the object at the hit position of the user's eye gaze ray with the target.
gameObject.transform.position = CoreServices.InputSystem.EyeGazeProvider.HitPosition;
  • 显示与用户当前注视位置有固定距离的视觉资产:
// If no target is hit, show the object at a default distance along the gaze ray.
gameObject.transform.position =
CoreServices.InputSystem.EyeGazeProvider.GazeOrigin +
CoreServices.InputSystem.EyeGazeProvider.GazeDirection.normalized * defaultDistanceInMeters;

另请参阅