Szemkalibrálás – MRTK2
Á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
Nyissa meg az MRTK szemkövető mintacsomagot (Assets/MRTK/Examples/Demos/EyeTracking)
EyeTrackingDemo-00-RootScene.unity jelenet betöltése
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:- Azt jelzi, hogy az értesítés automatikusan előugrik-e, ha a kalibrálási állapot igazról hamisra változik
- 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;
}
}