Dela via


Ögonkalibrering – MRTK2

Skärmbild från meddelande om ögonkalibrering

Ö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

  1. Öppna MRTK-exempelpaketet för ögonspårning (Assets/MRTK/Examples/Demos/EyeTracking)

  2. Load EyeTrackingDemo-00-RootScene.unity scen

  3. 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:

      1. Om meddelandet visas automatiskt när kalibreringsstatusen ändras från true till false
      2. 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;
      }
   }

Se även