Калибровка взгляда — MRTK2
Общие сведения
Если отслеживание взгляда является основной частью взаимодействия с приложением, можно убедиться, что калибровка взгляда пользователя является допустимой. Main причиной его недопустимости является то, что пользователь решил пропустить калибровку отслеживания взгляда при установке на устройство.
На этой странице рассматриваются следующие аспекты:
- Описывается, как определить, что пользователь откалибровает глаза.
- Содержит пример активации уведомления пользователя, чтобы указать пользователю пройти калибровку взгляда.
- Автоматическое закрытие уведомления о том, что калибровка взгляда становится действительной
- Уведомление о закрытии вручную, если пользователь решает продолжить работу без калибровки
Как определить состояние калибровки взгляда
Конфигурация отслеживания взгляда в MRTK настраивается через IMixedRealityEyeGazeProvider
интерфейс .
Использование CoreServices.InputSystem.EyeGazeProvider предоставляет реализацию поставщика взгляда по умолчанию, зарегистрированную в наборе средств во время выполнения.
IMixedRealityEyeGazeProvider.IsEyeGazeValid
возвращает значение , bool?
которое имеет значение NULL, если данные из средства отслеживания взгляда еще не доступны.
После получения данных возвращается значение true или false, указывающее, что калибровка отслеживания взгляда пользователя допустима или недопустима.
Пошаговый пример уведомления о калибровке взгляда
Открытие примера пакета отслеживания взгляда MRTK (Assets/MRTK/Examples/Demos/EyeTracking)
Загрузка сцены EyeTrackingDemo-00-RootScene.unity
Ознакомьтесь с EyeCalibrationChecker:
В этой сцене уже есть пример для определения того, откалиброван ли текущий пользователь под игровым объектом EyeCalibrationChecker. Он просто содержит несколько текстовых сеток и имеет некоторые дополнительные триггеры для смешения уведомления в и из него. Сюда входит медленное увеличение размера и непрозрачности при активации. После закрытия уведомления размер уведомления будет постепенно уменьшаться и исчезать.
К игровому объекту EyeCalibrationChecker прикреплен скрипт EyeCalibrationChecker, который предоставляет два события Unity:
OnEyeCalibrationDetected()
OnNoEyeCalibrationDetected()
Эти события активируются только при изменении состояния калибровки. Таким образом, если пользователь решит закрыть уведомление, уведомление не будет отображаться снова, пока
- Приложение будет перезапущено
- Обнаружен допустимый пользователь, а затем новый некалиброванный пользователь поместил устройство в
Для проверки правильности активации анимаций и событий скрипт EyeCalibrationChecker имеет
bool editorTestUserIsCalibrated
флаг . Например, при запуске в редакторе Unity можно протестировать:- Отображается ли уведомление автоматически после изменения состояния калибровки с true на false
- Указывает, будет ли автоматически отклонить уведомление снова, когда состояние изменится с false на true.
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;
}
}