MRTK 中的目视支持导航 — MRTK2

MRTK

假设你正在阅读石板上的信息,当到达所显示文本的末尾时,文本会自动向上滚动以显示更多内容。 或者,你可以流畅地放大你正在查看的位置。 地图还会自动调整内容,以将感兴趣的内容保留在视野中。 另一个有趣的应用程序是免手动观察 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。

Unity中眼睛支持的滚动设置

EyeTrackingTarget

附加 EyeTrackingTarget 组件可以灵活地处理与眼睛凝视相关的事件。 滚动示例演示了滚动文本,该文本在用户 查看 面板时开始,当用户 远离 面板时停止。 Unity 中的眼睛支持的滚动设置: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。

Unity中支持眼睛的平移和缩放设置

基于注意力的 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 轴的旋转。

Unity中眼睛支持的 3D 旋转设置

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

另请参阅


返回“MixedRealityToolkit 中的眼动跟踪”