Szemkalibrálás – MRTK2

Képernyőkép a szemkalibráló értesítésről

Áttekintés

Ha a szemkövetés alapvető része az alkalmazás élményének, érdemes meggyőződni arról, hogy a felhasználó szemkalibrálása érvényes. Az érvénytelenség fő oka az, hogy a felhasználó úgy döntött, hogy kihagyja a szemkövetési kalibrációt az eszközre való felhelyezésekor.

Ez az oldal a következőket tartalmazza:

  • Azt ismerteti, hogyan észlelhető, hogy a felhasználó szemkalibrált
  • Minta egy felhasználói értesítés aktiválásához, amely arra utasítja a felhasználót, hogy haladjon végig a szemkalibráláson
    • Értesítés automatikus elvetése, ha a szemkalibrálás érvényessé válik
    • Az értesítés manuális elvetése, ha a felhasználó úgy dönt, hogy kalibrálás nélkül folytatja a műveletet

A szem kalibrációs állapotának észlelése

Az MRTK szemkövetési konfigurációja az IMixedRealityEyeGazeProvider interfészen keresztül van konfigurálva.

A CoreServices.InputSystem.EyeGazeProvider használatával az eszközkészletben futtatáskor regisztrált alapértelmezett tekintetszolgáltatói implementáció érhető el. IMixedRealityEyeGazeProvider.IsEyeGazeValid null bool? értéket ad vissza, ha a szemkövetőből még nem áll rendelkezésre információ. Az adatok beérkezése után igaz vagy hamis értéket ad vissza, jelezve, hogy a felhasználó szemkövető kalibrációja érvényes vagy érvénytelen.

Minta szemkalibráló értesítés – lépésről lépésre

  1. Nyissa meg az MRTK szemkövető mintacsomagot (Assets/MRTK/Examples/Demos/EyeTracking)

  2. EyeTrackingDemo-00-RootScene.unity jelenet betöltése

  3. Tekintse meg az EyeCalibrationChecker elemet:

    • Ebben a jelenetben már van egy minta annak észlelésére, hogy az aktuális felhasználó kalibrálva van-e az EyeCalibrationChecker játékobjektum alatt. Egyszerűen csak néhány szöveges hálót hoz létre, és néhány további eseményindítóval rendelkezik az értesítés be- és kiegyenesítéséhez. Ez magában foglalja a méret lassú növelését és az aktiváláskor az átlátszatlanságot. Az értesítés elvetése után lassan csökken a mérete, és elhalványul.

    • Az EyeCalibrationChecker játékobjektumhoz csatolva van az EyeCalibrationChecker szkript, amely két Unity-eseményt tesz elérhetővé:

      • OnEyeCalibrationDetected()
      • OnNoEyeCalibrationDetected()
    • Ezek az események csak akkor aktiválódik, ha a kalibrálási állapot megváltozik. Ezért ha egy felhasználó úgy dönt, hogy bezárja az értesítést, az értesítés csak akkor jelenik meg újra, ha

      • Az alkalmazás újraindul
      • A rendszer érvényes felhasználót észlelt, majd egy új, skálázatlan felhasználó bekapcsolta az eszközt
    • Annak teszteléséhez, hogy az animációk és események megfelelően aktiválódnak-e, az EyeCalibrationChecker szkript rendelkezik egy bool editorTestUserIsCalibrated jelzővel. Ha például a Unity Szerkesztőben fut, tesztelheti a következőket:

      1. Azt jelzi, hogy az értesítés automatikusan előugrik-e, ha a kalibrálási állapot igazról hamisra változik
      2. Azt jelzi, hogy automatikusan elveti-e az értesítést, ha az állapot hamisról igazra változik.
    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;
      }
   }

Lásd még