MRTK 中眼睛支持的导航 — MRTK2
假设正在在平板电脑上阅读信息,并且到达显示文本的末尾时,文本自动向上滚动以显示更多内容。 或者,可以流畅地放大正在查看的内容。 地图还会自动调整内容,以将感兴趣的内容保持在你的视野范围内。 另一个有趣的应用程序是免手动观察 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 参数:
参数 | 说明 |
---|---|
LimitPanning | 如果已启用,将在其边界停止可滚动内容。 |
RectTransfToNavigate | 对要滚动的 RectTransform 的引用。 |
RefToViewport | 引用可滚动内容的父级 RectTransform,以确定正确的偏移和边界。 |
AutoGazeScrollIsActive | 如果启用,文本将自动滚动,如果用户查看“活动区域”(例如,顶部和底部的滚动面板,如果垂直滚动速度不是零)。 |
ScrollSpeed_x | 如果设置为不等于零的值,将启用水平滚动。 负值表示更改滚动方向:从左到右与从右到左。 |
ScrollSpeed_y | 如果设置为不等于零的值,将启用垂直滚动。 负值表示更改滚动方向:从上到下与从下到上。 |
MinDistFromCenterForAutoScroll | 要滚动的以 x 和 y 表示的与目标命中框中心之间的最小规范化距离 (0,0)。 因此,值必须在 0(总是滚动)和 0.5(不滚动)之间。 |
UseSkimProofing | 如果启用,它可以防止在快速四处查找时突然滚动移动。 这可能会使滚动感觉响应性降低。 它可以用 SkimProofUpdateSpeed 值进行优化。 |
SkimProofUpdateSpeed | 值越低,浏览后滚动的速度就越慢。 建议的值:5. |
EyeTrackingTarget
附加 EyeTrackingTarget 组件允许灵活地处理目视相关的事件。 滚动示例演示了在用户查看面板时开始滚动文本,并在用户将视线从面板移开时停止滚动。
支持凝视的平移和缩放
谁之前从未使用过虚拟地图来搜索其主页或探索全新的位置? 眼动跟踪可让你直接深入了解你感兴趣的部分,放大后,可以顺利地沿着街道探索你的社区! 这不仅可用于浏览地理地图,还可用于查看照片、数据可视化甚至实时流式医学图像中的详细信息。 在应用中使用此功能非常简单! 对于呈现给纹理的内容(例如,照片和流数据),只需添加 PanZoomTexture 脚本。 对于 RectTransform,请使用 PanZoomRectTransf。 通过扩展自动滚动功能,我们基本上能够同时垂直和水平滚动,并围绕用户当前焦点放大内容。
参数 | 说明 |
---|---|
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. |
基于注意力的 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 轴的旋转。 |
总之,上述脚本应使你能够开始对各种输入导航任务(例如滚动文本、缩放和平移纹理以及旋转调查 3D 全息影像)使用眼睛凝视。