眼球校正 - MRTK2
概觀
如果眼球追蹤是應用程式體驗的基本部分,則可能想要確保使用者的眼球校正有效。 其主要原因是使用者選擇在裝置上時略過眼球追蹤校正。
此頁面涵蓋下列內容:
- 描述如何偵測使用者眼球校正
- 提供如何觸發使用者通知以指示使用者通過眼球校正的範例
- 如果眼球校正變成有效,則自動關閉通知
- 如果使用者選擇在不校正的情況下繼續,請手動關閉通知
如何偵測眼球校正狀態
MRTK 中的眼球追蹤設定是透過 介面進行設定 IMixedRealityEyeGazeProvider
。
使用 CoreServices.InputSystem.EyeGazeProvider 提供在執行時間于工具組中註冊的預設注視提供者實作。
IMixedRealityEyeGazeProvider.IsEyeGazeValid
bool?
如果眼球追蹤器尚未提供任何資訊,則傳回為 Null 的 。
收到資料之後,它會傳回 true 或 false,表示使用者的眼球追蹤校正有效或無效。
範例眼球校正通知 - 逐步執行
開啟 MRTK 眼球追蹤範例套件 (Assets/MRTK/Examples/Demos/EyeTracking)
載入 EyeTrackingDemo-00-RootScene.unity 場景
查看 EyeCalibrationChecker:
在此場景中,我們已經有一個用來偵測目前使用者是否在EyeCalibrationChecker遊戲物件底下校正的範例。 它只會父代幾個文字網格,並有一些額外的觸發程式,可將通知混合在和輸出中。這包括在啟用時緩慢增加其大小和不透明度。 關閉通知之後,它會緩慢減少其大小並淡出。
附加至EyeCalibrationChecker 遊戲物件是 EyeCalibrationChecker腳本,其會公開兩個 Unity 事件:
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
只有在校正狀態變更時,才會觸發這些事件。 因此,如果使用者選擇關閉通知,通知將不會再次顯示,直到
- 應用程式重新開機
- 偵測到有效的使用者,然後有新的未布建使用者將裝置放入
為了測試是否正確觸發動畫和事件,EyeCalibrationChecker 腳本擁有
bool editorTestUserIsCalibrated
旗標。 例如,在 Unity 編輯器中執行時,可以測試:- 當校正狀態從 true 變更為 false 之後,通知是否會自動快顯
- 一旦狀態從 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;
}
}