凝视 - MRTK2

凝视是一种输入形式,它基于用户的观看位置与世界交互。 凝视有两种不同的风格

头部凝视

这种类型的凝视基于头部/相机所查看的方向。 在不支持眼睛凝视的系统上,或在硬件可能支持眼睛凝视但相应的权限和设置集尚未执行的情况下,头部凝视处于活动状态。

头部凝视通常与 HoloLens 1 样式交互相关联,其涉及的查看对象的方式是先将对象置于全息帧的中心,然后执行隔空敲击手势。

眼睛凝视

这种类型的凝视基于用户眼睛所看的位置。 眼睛凝视仅在支持眼动跟踪的系统上存在。 有关如何使用眼睛凝视的更多详细信息,请参阅眼动跟踪跟踪文档

GazeProvider

凝视功能(头部凝视和眼睛凝视)由 GazeProvider 提供。 可以在输入系统配置文件的 Pointer 节中配置此提供程序:

Gaze Configuration Entrypoint

与其他输入源一样,凝视提供程序通过使用指针与场景中的对象交互(有关指针的信息,请参阅此文档)。 就凝视提供程序来说,其指针是通过 InternalGazePointer 实现的,不是通过配置文件进行配置的。

可以通过将“凝视提供程序类型”更改为引用另一个实现 IMixedRealityGazeProviderIMixedRealityEyeGazeProvider 的类,将常用 GazeProvider 替换为备用实现。 通常建议使用常用 GazeProvider(如果发现 bug,请提交问题),因为重新实现 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);
}