目视校准 - MRTK2
概述
如果眼动跟踪是应用体验的基本部分,你可能希望确保用户的眼动校准有效。 无效的主要原因是用户在戴上设备时选择了跳过眼动跟踪校准。
本页涵盖以下内容:
- 描述如何检测用户是否经过眼动校准
- 提供一个示例,了解如何触发用户通知以指示用户进行眼动校准
- 如果眼动校准生效,则自动消除通知
- 如果用户选择在不校准的情况下继续,则手动关闭通知
如何检测眼动校准状态
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 Editor 中运行时,可以测试以下方面:- 校准状态由 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;
}
}