Augenkalibrierung — MRTK2
Übersicht
Wenn Eyetracking ein grundlegender Bestandteil Ihrer App-Erfahrung ist, kann sichergestellt werden, dass die Augenkalibrierung des Benutzers gültig ist. Der Standard Grund dafür, dass es ungültig ist, ist, dass der Benutzer die Eyetracking-Kalibrierung beim Anziehen des Geräts überspringen möchte.
Auf dieser Seite wird Folgendes behandelt:
- Beschreibt, wie erkannt wird, dass ein Benutzer augenkalibriert ist.
- Enthält ein Beispiel für das Auslösen einer Benutzerbenachrichtigung, um den Benutzer anzuweisen, die Augenkalibrierung zu durchlaufen.
- Automatisches Schließen der Benachrichtigung, wenn die Augenkalibrierung gültig wird
- Manuelles Schließen der Benachrichtigung, wenn der Benutzer den Vorgang ohne Kalibrierung fortsetzen möchte
Erkennen des Augenkalibrierungszustands
Die Eyetracking-Konfiguration im MRTK wird über die IMixedRealityEyeGazeProvider
Schnittstelle konfiguriert.
Die Verwendung von CoreServices.InputSystem.EyeGazeProvider stellt die standardmäßige Gaze-Anbieterimplementierung bereit, die zur Laufzeit im Toolkit registriert ist.
IMixedRealityEyeGazeProvider.IsEyeGazeValid
gibt einen bool?
zurück, der NULL ist, wenn noch keine Informationen vom Eyetracker verfügbar sind.
Sobald die Daten empfangen wurden, wird entweder true oder false zurückgegeben, um anzugeben, dass die Eyetracking-Kalibrierung des Benutzers gültig oder ungültig ist.
Benachrichtigung zur Beispiel-Augenkalibrierung – Schritt für Schritt
Öffnen Sie das MRTK-Beispielpaket für Die Augenverfolgung (Assets/MRTK/Examples/Demos/EyeTracking)
Laden der EyeTrackingDemo-00-RootScene.unity-Szene
Sehen Sie sich EyeCalibrationChecker an:
In dieser Szene haben wir bereits ein Beispiel für die Erkennung, ob der aktuelle Benutzer unter dem EyeCalibrationChecker-Spielobjekt kalibriert ist. Es übergibt einfach ein paar Textgitter und verfügt über einige zusätzliche Trigger zum Ein- und Ausblenden der Benachrichtigung. Dies umfasst das langsame Erhöhen der Größe und Deckkraft bei der Aktivierung. Sobald die Benachrichtigung geschlossen wurde, wird sie langsam verkleinert und ausgeblendet.
An das EyeCalibrationChecker-Spielobjekt angefügt ist das EyeCalibrationChecker-Skript, das zwei Unity-Ereignisse verfügbar macht:
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
Diese Ereignisse werden nur ausgelöst, wenn sich die Kalibrierung status ändert. Wenn sich ein Benutzer also entscheidet, die Benachrichtigung zu schließen, wird die Benachrichtigung erst wieder angezeigt, wenn
- Die App wird neu gestartet.
- Ein gültiger Benutzer wurde erkannt, und dann hat ein neuer nicht kalibrierter Benutzer das Gerät eingeschaltet.
Um zu testen, ob die Animationen und Ereignisse ordnungsgemäß ausgelöst werden, besitzt das EyeCalibrationChecker-Skript ein
bool editorTestUserIsCalibrated
Flag. Wenn Sie beispielsweise im Unity-Editor ausführen, können Sie Folgendes testen:- Gibt an, ob die Benachrichtigung automatisch angezeigt wird, sobald sich die Kalibrierung status von "true" in "false" ändert.
- Gibt an, ob die Benachrichtigung automatisch wieder geschlossen wird, sobald die status von false in true geändert wird.
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;
}
}