Ögonkalibrering – MRTK2
Översikt
Om ögonspårning är en grundläggande del av din appupplevelse kan man vilja se till att användarens ögonkalibrering är giltig. Den främsta orsaken till att den är ogiltig är att användaren har valt att hoppa över ögonspårningskalibreringen när den sätts på enheten.
Den här sidan beskriver följande:
- Beskriver hur du identifierar att en användare är ögonkalibrerad
- Innehåller ett exempel på hur du utlöser ett användarmeddelande för att instruera användaren att gå igenom ögonkalibreringen
- Stäng automatiskt meddelandet om ögonkalibrering blir giltigt
- Stäng meddelandet manuellt om användaren väljer att fortsätta utan kalibrering
Så här identifierar du ögonkalibreringstillståndet
Konfiguration av ögonspårning i MRTK konfigureras via IMixedRealityEyeGazeProvider
gränssnittet.
Med CoreServices.InputSystem.EyeGazeProvider får du standardimplementeringen av blickprovidern som registrerats i verktygslådan vid körning.
IMixedRealityEyeGazeProvider.IsEyeGazeValid
returnerar ett bool?
värde som är null om ingen information från ögonspåraren är tillgänglig ännu.
När data har tagits emot returneras antingen sant eller falskt för att indikera att användarens ögonspårningskalibrering är giltig eller ogiltig.
Exempel på meddelande om ögonkalibrering – steg för steg
Öppna MRTK-exempelpaketet för ögonspårning (Assets/MRTK/Examples/Demos/EyeTracking)
Load EyeTrackingDemo-00-RootScene.unity scen
Kolla in EyeCalibrationChecker:
I den här scenen har vi redan ett exempel för att identifiera om den aktuella användaren är kalibrerad under eyecalibrationChecker-spelobjektet. Det är bara föräldrar några textnät och har några ytterligare utlösare för att blanda meddelandet in och ut. Detta inkluderar att långsamt öka dess storlek och opacitet vid aktivering. När meddelandet har stängts minskar det långsamt dess storlek och tonas ut.
Kopplat till eyecalibrationChecker-spelobjektet är skriptet EyeCalibrationChecker som exponerar två Unity-händelser:
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
Dessa händelser utlöses endast om kalibreringsstatusen ändras. Om en användare väljer att stänga meddelandet visas därför inte meddelandet igen förrän
- Appen startas om
- En giltig användare har identifierats och sedan har en ny okalibrerad användare aktiverat enheten
För att testa om animeringarna och händelserna utlöses korrekt har skriptet EyeCalibrationChecker en
bool editorTestUserIsCalibrated
flagga. När du till exempel kör i Unity-redigeraren kan du testa:- Om meddelandet visas automatiskt när kalibreringsstatusen ändras från true till false
- Om det automatiskt avvisar meddelandet igen när statusen ändras från falskt till sant.
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;
}
}