眼球校正 — MRTK2

Screenshot from eye calibration notification

概觀

如果眼球追蹤是應用程式體驗的基本部分,您可能想要確保使用者的眼球校正有效。 其不正確主要原因是使用者選擇在裝置上時略過眼球追蹤校正。

此頁面涵蓋下列內容:

  • 描述如何偵測使用者眼球校正
  • 提供如何觸發使用者通知以指示使用者完成眼球校正的範例
    • 如果眼球校正變成有效,則自動關閉通知
    • 如果使用者選擇在不校正的情況下繼續,請手動關閉通知

如何偵測眼球校正狀態

MRTK 中的眼球追蹤設定是透過 介面進行 IMixedRealityEyeGazeProvider 設定。

使用 CoreServices.InputSystem.EyeGazeProvider 可在執行時間提供工具組中註冊的預設注視提供者實作。 IMixedRealityEyeGazeProvider.IsEyeGazeValidbool?如果尚未提供來自眼球追蹤器的資訊,則會傳回 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 編輯器中執行時,可以測試:

      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;
      }
   }

另請參閱