凝视 是一种输入形式,根据用户查看的位置与世界进行交互。 凝视有两种不同的风格
头部凝视
这种类型的凝视基于头部/相机正在查看的方向。 头部凝视在不支持眼睛凝视的系统上处于活动状态,或者在硬件可能支持眼睛凝视但尚未执行正确的 权限集和设置 的情况下。
头部凝视通常与 HoloLens 1 样式交互相关联,这些交互涉及通过将对象置于全息框架的中心,然后执行空中点击手势来查看对象。
眼睛凝视
这种类型的凝视基于用户眼睛的视线位置。 眼睛凝视仅在支持眼动跟踪的系统上存在。 有关如何使用眼睛凝视的更多详细信息,请参阅 眼动跟踪文档 。
GazeProvider
凝视功能 (头部和眼睛) 由 GazeProvider 提供。 可以在输入系统配置文件的 “指针 ”部分配置此提供程序:
与其他输入源一样,凝视提供程序通过使用指针与场景中的对象进行交互 (请参阅此文档,了解有关指针) 的信息 。
对于凝视提供程序,其指针通过 InternalGazePointer 实现,而不是通过配置文件进行配置。
可以通过更改凝 视提供程序类型 来引用实现 IMixedRealityGazeProvider 和 IMixedRealityEyeGazeProvider 的不同类,将常用 GazeProvider 替换为备用实现。 当发现 bug 时,通常建议使用常用 GazeProvider (和提交问题) ,因为重新实现 GazeProvider 并非易事。
平台提供的替代凝视姿势
默认情况下,MRTK GazeProvider 使用相机帧的中心作为凝视原点。 某些平台(例如HoloLens 2上的Windows Mixed Reality)提供另一种定义的凝视姿势。 这通过 Use Head Gaze Override 凝视设置中的 设置进行管理。 启用后,将使用替代的凝视替代。 禁用后,将使用默认的帧中心原点。 具体而言,对于HoloLens 2,凝视角度将提高几个度,以考虑用户使用头部进行定位时所感到的舒适感。
用法
如何获取当前凝视目标
此示例演示如何获取用户凝视所针对的当前游戏对象。
void LogCurrentGazeTarget()
{
if (CoreServices.InputSystem.GazeProvider.GazeTarget)
{
Debug.Log("User gaze is currently over game object: "
+ CoreServices.InputSystem.GazeProvider.GazeTarget)
}
}
如何获取当前凝视方向和原点
此示例演示如何获取表示用户凝视方向的 Vector3 和原点 (方向) 。
void LogGazeDirectionOrigin()
{
Debug.Log("Gaze is looking in direction: "
+ CoreServices.InputSystem.GazeProvider.GazeDirection);
Debug.Log("Gaze origin is: "
+ CoreServices.InputSystem.GazeProvider.GazeOrigin);
}