概述
眼动跟踪由 Unity 输入系统本机处理,但 MRTK3 会提供有用的帮助程序,以便轻松添加眼动跟踪。
默认情况下, MRTK XR Rig
预制件已有 MRTK3 的凝视控制器。 如果不使用 MRTK XR Rig
,但想使用 MRTK3 的凝视控制器,请将 MRTK Gaze Controller
预制件添加到 Unity 场景。
MRTK 的凝视控制预制件具有绑定到 Unity 眼睛和头部凝视输入的 Unity XR 控制器和交互器。 控制器的操作是设置的,因此眼睛凝视优先于头部凝视。 如果禁用、未配置或未校准眼睛凝视,控制器将改用头部凝视姿势。 有关如何配置 MRTK3 凝视控制器的操作绑定的更多详细信息,请参阅随附的 MRTK 默认输入操作 Unity 资产。
重要
如果要在使用 OpenXR 时启用眼动跟踪,必须将眼睛凝视交互配置文件添加到 OpenXR 的交互配置文件配置。 有关在 Unity 中配置 OpenXR 设置的详细信息,请参阅使用 MRTK 设置新的 OpenXR 项目。
此外,如果使用通用 Windows 平台,请务必在“项目”>“项目设置”>“发布设置”>“功能”中添加“GazeInput”。
模糊凝视交互器
MRTK3 的凝视控制器已设置为使用 FuzzyGazeInteractor
,它是一个 Unity 交互器,可实现模糊凝视交互技术,其中某个圆锥角度和距离范围内的对象是被锁定的,并根据用户的凝视方向与之交互。 评分系统根据潜在目标的交互适用性帮助确定潜在目标的优先级。
该脚本定义了多个用于控制凝视交互器行为的字段和属性。 一些重要字段包括:
- coneAngle:在该角度范围内,通过凝视将对象视为目标。
- minGazeDistance 和 maxGazeDistance:通过凝视可以将其视为对象的最小和最大距离。 distanceWeight、angleWeight、distanceToCenterWeight 和 angleToCenterWeight:分配给用于确定对象的“凝视分数”的不同条件的权重。
- 精度:用于调整模糊凝视物理射线发射的精度的值。
- performAdditionalRaycast:指示在眼睛凝视后是否执行额外的射线发射以提高评分结果的标志。
- precisionCurve:用于根据目标距离控制精度级别的动画曲线。
该脚本会重写基类 XRRayInteractor
中的某些方法,以提供自己的实现。 值得注意的重写方法包括:
- IsHitValid:根据 coneAngle、minGazeDistance 和 maxGazeDistance 字段定义的角度和距离条件,确定对可交互对象的命中是否有效。
- ScoreHit:可交互的及其管理的射线发射根据距离、射线发射命中角和目标中心角度命中的分数。 该分数是加权因素的组合。
- ConecastScoreCompare:按分数升序比较射线发射命中次数。
- GetValidTargets:根据射线发射命中及其分数检索凝视交互器的有效目标。
交互器停留管理器
MRTK3 的凝视控制器还使用 InteractorDwellManager
脚本组件进行设置。 此脚本使用 Unity 中的 XR 交互工具包对可交互对象实现基于停留的选择。 它管理停留计时器,触发选择,并跟踪指定交互器的可交互的停留状态。 若要利用凝视停留选择,目标交互对象必须是 MRTK3 的 StatefulInteractable
,并且设置了 Use Gaze Dwell
标志。
注意
建议不要在可以手动或语音输入的情况下使用基于停留的选择,因为停留可能会导致不可预知或意外的 UI 元素激活。 应用程序可能仍希望考虑作为辅助功能或语音和手动输入不可用的情况下使用停留输入。 有关如何最好地使用停留的设计指南,请参阅“眼睛凝视和停留”和“头部凝视和停留”。
进入悬停状态后,此交互器将在超过停留触发时间前继续选择,之后将在可交互的设备上触发选择。 可以使用以下参数配置停留设置:
- DwellTriggerTime:确定交互器在进入悬停状态后仍选择可交互的时长。