MRTK 中的目视支持导航 — MRTK2
假设你正在阅读石板上的信息,当到达所显示文本的末尾时,文本会自动向上滚动以显示更多内容。 或者,你可以流畅地放大你正在查看的位置。 地图还会自动调整内容,以将感兴趣的内容保留在视野中。 另一个有趣的应用程序是免手动观察 3D 全息影像,方法是自动将你正在查看的全息影像的部件带到前面。 下面是本页在目视支持导航上下文中介绍的一些示例。
以下说明假定你已熟悉如何在 MRTK 场景中设置眼动跟踪,并熟悉在 MRTK Unity中访问眼动跟踪数据的基础知识。
下面讨论的示例都是 (Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation) 场景的一部分 EyeTrackingDemo-03-Navigation
。
总结: 自动滚动文本、支持眼睛凝视的平移和虚拟地图缩放、免手动视线定向 3D 旋转。
自动滚动
自动滚动使用户无需抬起手指即可滚动浏览文本。
只需继续阅读,文本将自动向上或向下滚动,具体取决于用户查看的位置。
可以从 (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) 中 EyeTrackingDemo-03-Navigation
提供的示例开始。
此示例使用 TextMesh 组件来灵活加载和设置新文本的格式。
若要启用自动滚动,只需将以下两个脚本添加到文本框的碰撞体组件:
ScrollRectTransf
若要滚动 浏览 TextMesh 或更一般地说 是 RectTransform 组件,可以使用 ScrollRectTransf 脚本。 如果要滚动纹理而不是 RectTransform,请使用 ScrollTexture 而不是 ScrollRectTransf。 下面更详细地介绍了Unity 编辑器中可用的 ScrollRectTransf 参数:
参数 | 说明 |
---|---|
LimitPanning | 如果启用,则会在其边界停止可滚动内容。 |
RectTransfToNavigate | 对要滚动的 RectTransform 的 引用。 |
RefToViewport | 引用可滚动内容的父 RectTransform ,以确定正确的偏移量和边界。 |
AutoGazeScrollIsActive | 如果启用,如果用户查看 活动区域 (例如,如果垂直滚动速度不是零) ,则滚动面板的顶部和底部部分,文本将自动滚动。 |
ScrollSpeed_x | 如果设置为不等于零的值,则将启用水平滚动。 负值表示滚动方向的变化:从左到右,从右到左。 |
ScrollSpeed_y | 如果设置为不等于零的值,则将启用垂直滚动。 负值表示滚动方向的变化:从上到下,从下到上。 |
MinDistFromCenterForAutoScroll | 从目标命中框中心 (0、 0) 的规范化最小距离(以 x 和 y 为单位)。 因此,值的范围必须介于 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 | 从目标命中框中心 (0、 0) 的规范化最小距离(以 x 和 y 为单位)。 因此,值的范围必须介于 0 (始终滚动) 和 0.5 (没有滚动) 。 |
UseSkimProofing | 如果启用,它会在快速环顾四周时防止突然滚动移动。 不过,这可能会降低滚动的响应能力。 可以使用 SkimProofUpdateSpeed 值对其进行优化。 |
SkimProofUpdateSpeed | 值越小,浏览后滚动速度越慢。 建议的值:5。 |
基于注意力的 3D 旋转
想象一下,看着一个 3D 对象,你希望看到的部件更神奇地转向你 - 仿佛系统会读懂你的头脑,并知道把项目转向你! 这是基于注意力的 3D 旋转的想法,使你无需抬起手指即可调查全息影像的所有侧。 若要启用此行为,只需将 OnLookAtRotateByEyeGaze 脚本添加到具有 Collider 组件的 GameObject 部分。 可以调整下面列出的多个参数,以限制全息影像旋转的速度和方向。
可以想象,在拥挤的场景中,随时激活此行为可能会很快变得相当分散注意力。
这就是为什么你可能希望从禁用此行为开始,然后使用语音命令快速启用它的原因。
或者,我们在 (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) 中添加了一个示例EyeTrackingDemo-03-Navigation
,以使用 TargetMoveToCamera,你可以为其选择一个重点目标,并且它飞在你面前 - 只需说“来到我身边”。
进入近距模式后,将自动启用自动旋转模式。 在该模式下,你可以从四面八方观察它,要么只是靠在后面看,四处走动,要么伸手抓住和旋转它。 当你关闭目标 (看起来 & 捏或说 “发回”) 时,它将返回到其原始位置,并从远处停止对你做出反应。
参数 | 说明 |
---|---|
SpeedX | 水平旋转速度。 |
迅速 | 垂直旋转速度。 |
InverseX | 反转水平旋转方向。 |
InverseY | 反转垂直旋转方向。 |
RotationThreshInDegrees | 如果“凝视目标”和“相机到目标”之间的角度小于此值,则不执行任何作。 这是为了防止小抖动旋转。 |
MinRotX | 最小水平旋转角度。 这是为了限制不同方向的旋转。 |
MaxRotX | 最大水平旋转角度。 这是为了限制不同方向的旋转。 |
MinRotY | 最小垂直旋转角度,用于限制围绕 x 轴的旋转。 |
MaxRotY | 最大垂直旋转角度,用于限制围绕 y 轴的旋转。 |
总之,上述脚本应使你能够开始将眼睛凝视用于各种输入导航任务,例如滚动文本、缩放和平移纹理以及旋转调查 3D 全息影像。