目视校准 - MRTK2

Screenshot from eye calibration notification

概述

如果眼动跟踪是应用体验的基本部分,你可能希望确保用户的眼动校准有效。 无效的主要原因是用户在戴上设备时选择了跳过眼动跟踪校准。

本页涵盖以下内容:

  • 描述如何检测用户是否经过眼动校准
  • 提供一个示例,了解如何触发用户通知以指示用户进行眼动校准
    • 如果眼动校准生效,则自动消除通知
    • 如果用户选择在不校准的情况下继续,则手动关闭通知

如何检测眼动校准状态

MRTK 中的眼动跟踪配置通过 IMixedRealityEyeGazeProvider 接口进行配置。

使用 CoreServices.InputSystem.EyeGazeProvider 在运行时提供在工具包中注册的默认注视提供程序实现。 IMixedRealityEyeGazeProvider.IsEyeGazeValid 返回 bool?,如果还没有来自眼动仪的信息可用,则为 null。 一旦接收到数据,它将返回 true 或 false 以指示用户的眼动追踪校准有效或无效。

眼动校准通知示例 - 分步操作

  1. 打开 MRTK 眼动跟踪示例包 (Assets/MRTK/Examples/Demos/EyeTracking)

  2. 加载 EyeTrackingDemo-00-RootScene.unity 场景

  3. 检查 EyeCalibrationChecker

    • 在这个场景中,我们已经在 EyeCalibrationChecker 游戏对象下有一个检测当前用户是否校准的示例。 这只是一些文本网格的父项,并有一些额外的触发器来混入和混出通知。这包括在激活时缓慢增加通知的大小和不透明度。 关闭通知后,通知会逐渐减小其大小并淡出。

    • 附加到 EyeCalibrationChecker 游戏对象的是 EyeCalibrationChecker 脚本,它公开了两个 Unity 事件

      • OnEyeCalibrationDetected()
      • OnNoEyeCalibrationDetected()
    • 只有在校准状态发生变化时才会触发这些事件。 因此,如果用户选择关闭通知,则通知不会再次显示,直到发生以下情况

      • 应用重新启动
      • 已检测到有效用户,然后新的未校准用户已打开设备
    • 为了测试是否正确触发动画和事件,EyeCalibrationChecker 脚本拥有一个 bool editorTestUserIsCalibrated 标志。 例如,在 Unity Editor 中运行时,可以测试以下方面:

      1. 校准状态由 true 变为 false 时是否自动弹出通知
      2. 在状态从 false 更改为 true 后,是否自动再次关闭通知。
    private bool? prevCalibrationStatus = null;
    ...

   void Update()
   {
      // Get the latest calibration state from the EyeGazeProvider
      bool? calibrationStatus = CoreServices.InputSystem?.EyeGazeProvider?.IsEyeCalibrationValid;

      ...

      if (calibrationStatus != null)
      {
         if (prevCalibrationStatus != calibrationStatus)
         {
            if (calibrationStatus == false)
            {
               OnNoEyeCalibrationDetected.Invoke();
            }
         else
         {
            OnEyeCalibrationDetected.Invoke();
         }

         prevCalibrationStatus = calibrationStatus;
      }
   }

另请参阅