共用方式為


管理眼球追蹤存取和校正

HoloLens 2 的眼球追蹤提供強大的功能來取代用戶互動。 不過,有兩個使用者檢查點必須順利完成,才能讓眼球追蹤在您的app中運作。 這兩個檢查點 () 核准應用程式的眼球追蹤存取權, (b) 完成裝置上的眼球追蹤校正。 系統會視需要自動提示完成這些動作,但使用者可能會不小心拒絕某些專案並停滯。 本檔概述流覽眼球追蹤檢查點的最佳做法,並在需要時協助使用者重試,確保應用程式的順暢和質量體驗。

存取要求

若要利用眼球追蹤,您的應用程式必須先要求存取權。 這是透過呼叫 EyePose::RequestAccessAsync 來完成,其記載於 眼部注視開發指南中。 此函式會觸發系統檢查,以查看是否可供您的應用程式使用眼球注視存取。 在安裝后的第一個存取要求上,系統會提示使用者輸入許可權對話框。 如果他們按兩下 [是],函式會傳回 GazeInputAccessStatus::Allowed,而且您可以繼續進行您的體驗。 不過,如果用戶選取 [否],函式會傳回 GazeInputAccessStatus::D eniedByUser

HoloLens 2 ET 許可權對話框的影像

存取要求對話框只會在您的應用程式第一次啟動時出現一次。 用戶選擇之後,系統會記住其喜好設定,並將其套用至該登入使用者的所有未來存取要求。 如果使用者稍後想要變更其喜好設定,他們可以透過 HoloLens [設定] 應用程式中 [隱私權] 頁面的 [應用程式許可權] 區段來執行此動作。 因為喜好設定是黏性,所以使用者可惜地進入眼球追蹤關閉的狀態,而且不知道如何修正。 如果眼球追蹤是應用程式體驗的重要部分,而且您偵測到眼球追蹤存取遭到拒絕,您可以直接將設定應用程式啟動至正確的頁面,以協助使用者。 這是透過呼叫 Launcher::LaunchUriAsync 與字串 “ms-settings:privacy-eyetracker” 來完成。

using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;

LaunchUriAsync(Uri(L"ms-settings:privacy-eyetracker"));

您應該避免自動啟動設定應用程式,或重複提示使用者。 相反地,在UI中尋找相關位置,您可以在其中傳達ET存取的目前狀態、說明應用程式的眼球追蹤值,並提供按鈕讓使用者自行啟動它。

延遲存取要求

意外拒絕存取要求的常見原因是應用程式第一次啟動時,由多個快顯所疏散的使用者。 最佳做法是只在應用程式使用眼球追蹤的第一刻等候並要求存取權。 例如,第一次出現 ET 優化功能表時。 因此,使用者在做出選擇時將有更多內容和較少的干擾,以減少他們稍後需要變更它的機會。

OpenXR 的考慮

如果您使用 OpenXR,則適用相同的規則,但觸發存取要求的 API 稍有不同。 當使用已啟用眼球追蹤延伸模組 (XR_EXT_eye_gaze_interaction) 的實例時,OpenXR 應用程式會在呼叫 xrCreateSession 之後自動要求許可權。 若要深入瞭解如何透過OpenXR使用眼球追蹤,請流覽OpenXR規格中的 眼球注視延伸模組檔

使用者校正

一旦您的應用程式可以存取眼球追蹤,下一個檢查點是使用者校正。 與存取要求類似,有一個特定 API 可在呼叫時觸發校正 UI 提示。 API 是 SpatialPointerPose::Eyes。 請注意,這是用來擷取每個畫面上眼睛注視姿勢數據的相同 API,因此實際上,存取眼球追蹤數據會觸發校正提示。 因此,應用程式應該等到他們實際想要使用眼球追蹤姿勢數據,再呼叫此 API 並可能觸發提示。

HoloLens 2 ET 校正提示的影像

HoloLens 會快取校正,並在偵測到校正的使用者已將裝置放入時自動交換。 因此,只有尚未校正裝置上眼睛注視的使用者,才會顯示此提示。 如果未布建的使用者在提示中按下 「取消」來拒絕校正,則裝置上的任何應用程式將無法使用其眼球注視。 HoloLens 會記住其選取專案,而且在移除並放回裝置之前,不會再次提示。 雖然對於隱私權而言很重要,但如果使用者不小心取消提示,就無法在應用程式中使用眼球追蹤,這可能會造成混淆。

若要檢查目前的使用者是否已校正,請呼叫 EyesPose::IsCalibrationValid。 如果目前的使用者未校正,您應該最好回到不依賴眼球注視的互動。 不過,如果眼球注視對於您的體驗很重要,而且您必須確定所有使用者都已校正,您可以使用 Launcher::LaunchUriForResultsAsync 搭配字元串 “ms-hololenssetup://EyeTracking” 手動叫用校正應用程式。

using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;

winrt::Windows::System::LauncherOptions options;
auto package = winrt::Windows::ApplicationModel::Package::Current();
options.TargetApplicationPackageFamilyName(L"Microsoft.HoloLensSetup_8wekyb3d8bbwe");
winrt::Windows::System::Launcher::LaunchUriForResultsAsync(winrt::Windows::Foundation::Uri(L"ms-hololenssetup://EyeTracking"), options);

LaunchUriForResultsAsync 是已知 LaunchUriAsync API 的同層級,其已 建議 為啟動校正應用程式的方法。 不過,LaunchUriAsync 方法 保證在校正完成後返回您的應用程式。 在大部分情況下,它只會返回殼層。 LaunchUriForResultsAsync API 保證傳回您的應用程式,因此對使用者而言是更好的體驗。

LaunchUriForResultsAsync 需要額外的 'options' 參數,並將 'TargetApplicationPackageFamilyName' 屬性設定為符合 HoloLens 安裝程式應用程式。 如果您曾經需要 HoloLens 上安裝之應用程式的套件系列名稱字串,您可以在 [PackageRelativeId] 下的 Windows 裝置入口網站的 [應用程式: 已安裝的應用程式] 區段中找到它。只要移除 “!字串結尾的App字元。

Windows 裝置埠中已安裝應用程式頁面部分的影像

應用程式絕對不應該自動啟動眼球注視校正,而不需用戶互動。 類似於存取要求,建議您在UI中找到相關位置,您可以在UI中顯示校正狀態、傳達應用程式的眼球追蹤值,並提供按鈕讓使用者自行啟動校正。

OpenXR 的考慮

如果您使用 OpenXR,則會套用相同的模式,但觸發校正提示的 API 稍有不同。 在OpenXR中,系統會在第一次呼叫 xrSyncActions 時觸發未連結的使用者,並啟用眼球注視動作。 若要深入瞭解如何透過OpenXR使用眼球追蹤,請流覽OpenXR規格中的 眼球注視延伸模組檔