MRTK 中支持眼睛的导航 - MRTK2

MRTK

假设正在在平板电脑上阅读信息,并且到达显示文本的末尾时,文本自动向上滚动以显示更多内容。 或者,可以流畅地放大正在查看的内容。 地图还会自动调整内容,以将感兴趣的内容保持在你的视野范围内。 另一个有趣的应用程序是免手动观察 3D 全息影像,通过自动将你正在查看的全息影像部分引入到前面。 以下是此页上在眼睛支持的导航上下文中介绍的一些示例。

以下说明假定你已熟悉如何在 MRTK 场景中设置眼动跟踪,并且熟悉在 MRTK Unity 中访问眼动跟踪数据的基础知识。 下面讨论的示例都是 EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation) 场景的一部分。

摘要:自动滚动文本、眼睛注视支持平移和缩放虚拟地图、免手动注视定向 3D 旋转。

自动滚动

自动滚动允许用户在不抬起手指的情况下滚动文本。 只需继续阅读,文本就会自动向上或向下滚动,这取决于用户正在查找的位置。 可以从 EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) 中提供的示例开始。 此示例使用 TextMesh 组件,以灵活地加载新文本并设置其格式。 若要启用自动滚动,只需将以下两个脚本添加到文本框的碰撞体组件:

ScrollRectTransf

若要滚动 TextMesh 或更常见的 RectTransform 组件,你可以使用 ScrollRectTransf 脚本。 如果要滚动浏览纹理而不是 RectTransform,请使用 ScrollTexture 而不是 ScrollRectTransf。 下面更详细地介绍了 Unity 编辑器中可用的 ScrollRectTransf 参数:

parameters 说明
LimitPanning 如果已启用,将在其边界停止可滚动内容。
RectTransfToNavigate 对要滚动的 RectTransform 的引用。
RefToViewport 引用可滚动内容的父级 RectTransform,以确定正确的偏移和边界。
AutoGazeScrollIsActive 如果启用,文本将自动滚动,如果用户查看“活动区域”(例如,顶部和底部的滚动面板,如果垂直滚动速度不是零)。
ScrollSpeed_x 如果设置为不等于零的值,将启用水平滚动。 负值表示更改滚动方向:从左到右与从右到左。
ScrollSpeed_y 如果设置为不等于零的值,将启用垂直滚动。 负值表示更改滚动方向:从上到下与从下到上。
MinDistFromCenterForAutoScroll 要滚动的以 x 和 y 表示的与目标命中框中心之间的最小规范化距离 (0,0)。 因此,值必须在 0(总是滚动)和 0.5(不滚动)之间。
UseSkimProofing 如果启用,它可以防止在快速四处查找时突然滚动移动。 这可能会使滚动感觉响应性降低。 它可以用 SkimProofUpdateSpeed 值进行优化。
SkimProofUpdateSpeed 值越低,浏览后滚动的速度就越慢。 建议的值:5.

Eye-supported scroll setup in Unity

EyeTrackingTarget

附加 EyeTrackingTarget 组件允许灵活地处理目视相关的事件。 滚动示例演示了在用户查看面板时开始滚动文本,并在用户将视线从面板移开时停止滚动。 Eye-supported scroll setup in Unity: EyeTrackingTarget

支持凝视的平移和缩放

谁之前从未使用过虚拟地图来搜索其主页或探索全新的位置? 眼动跟踪可让你直接深入了解你感兴趣的部分,放大后,可以顺利地沿着街道探索你的社区! 这不仅可用于浏览地理地图,还可用于查看照片、数据可视化甚至实时流式医学图像中的详细信息。 在应用中使用此功能非常简单! 对于呈现给纹理的内容(例如,照片和流数据),只需添加 PanZoomTexture 脚本。 对于 RectTransform,请使用 PanZoomRectTransf。 通过扩展自动滚动功能,我们基本上能够同时垂直和水平滚动,并围绕用户当前焦点放大内容。

parameters 说明
LimitPanning 如果已启用,将在其边界停止可滚动内容。
HandZoomEnabledOnStartup 指示是否自动启用手势来执行缩放手势。 你可能希望首先禁用它,以避免意外触发缩放操作。
RendererOfTextureToBeNavigated 要导航的纹理的引用呈现器。
Zoom_Acceleration 缩放加速定义逻辑速度函数映射的倾斜度。
Zoom_SpeedMax 最大缩放速度。
Zoom_MinScale 纹理缩放的最小比例:例如,0.5f(原始大小的一半)。
Zoom_MaxScale 纹理缩放的最大比例:例如,1f(原始大小)或 2.0f(原始大小的两倍)。
Zoom_TimeInSecToZoom 定时缩放:一旦触发,缩放/缩小将在给定的时间内执行,以秒为单位。
Zoom_Gesture 用于放大/缩小的手势类型。
--- ---
Pan_AutoScrollIsActive 如果启用,文本将自动滚动,如果用户查看“活动区域”(例如,顶部和底部的滚动面板,如果垂直滚动速度不是零)。
Pan_Speed_x 如果设置为不等于零的值,将启用水平滚动。 负值表示更改滚动方向:从左到右与从右到左。
Pan_Speed_y 如果设置为不等于零的值,将启用垂直滚动。 负值表示更改滚动方向:从上到下与从下到上。
Pan_MinDistFromCenter 要滚动的以 x 和 y 表示的与目标命中框中心之间的最小规范化距离 (0,0)。 因此,值必须在 0(总是滚动)和 0.5(不滚动)之间。
UseSkimProofing 如果启用,它可以防止在快速四处查找时突然滚动移动。 这可能会使滚动感觉响应性降低。 它可以用 SkimProofUpdateSpeed 值进行优化。
SkimProofUpdateSpeed 值越低,浏览后滚动的速度就越慢。 建议的值:5.

Eye-supported pan and zoom setup in Unity

基于注意力的 3D 旋转

假设看着一个 3D 对象,你想看得更仔细的部分神奇地转向你,就好像系统会阅读你的想法,知道把项目转向你! 这是基于注意力的 3D 旋转理念,使你在不抬起手指的情况下研究全息影像的所有方面。 若要启用此行为,只需使用碰撞器组件将 OnLookAtRotateByEyeGaze 脚本添加到 GameObject 的一部分。 可以调整下面列出的多个参数,以限制全息影像旋转的速度和方向。

如你想象的那样,在拥挤的场景中,让此行为在一直处于活动状态可能很快就会分散注意力。 因此,你可能希望首先禁用此行为,然后使用语音命令快速启用它。 另外,我们在 EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) 中添加了一个示例来使用 TargetMoveToCamera,你可以为其选择一个重点目标,它会飞在你面前,只需说“向我看”即可。

进入近模式后,将自动启用自动旋转模式。 在这种模式下,你可以从各个角度观察它,靠在椅背上看它,也可以绕着它走,或者伸手抓住它,用手旋转它。 当你消除目标 (看起来 & 捏或说 “发送回”) 时,它将返回到其原始位置,并停止对你从远处的反应。

参数 说明
SpeedX 水平旋转速度。
SpeedY 垂直旋转速度。
InverseX 反转水平旋转方向。
InverseY 反转垂直旋转方向。
RotationThreshInDegrees 如果“凝视目标”和“相机的目标”之间的角度小于此值,则不执行任何操作。 这是为了防止微小的抖动旋转。
MinRotX 最小水平旋转角度。 这是为了限制不同方向的旋转。
MaxRotX 最大水平旋转角度。 这是为了限制不同方向的旋转。
MinRoty 最小垂直旋转角度,以限制围绕 x 轴的旋转。
MaxRotY 最大垂直旋转角度,以限制围绕 y 轴的旋转。

Eye-supported 3D rotation setup in Unity

总之,上述脚本应使你能够开始对各种输入导航任务(例如滚动文本、缩放和平移纹理以及旋转调查 3D 全息影像)使用眼睛凝视。

请参阅


返回“MixedRealityToolkit 中的眼动跟踪”