
01
写在前面
手部追踪和虚拟现实都是新兴技术,将两者结合成流畅无缝的体验是一个真正的挑战。在这两种情况下,开发人员都需要推翻许多长期存在的,对传统 PC 设置非常有用的想法。这也是一个以以前只存在于科幻小说中的方式进行实验和创造的难以置信的机会。本指南将长期的用户体验设计原则和 VR 研究与我们从持续开发和用户测试中学到的知识结合在一起。就像这个领域的一切一样,它只是通往元宇宙之路上的一块垫脚石。_重要提示: 感觉冲突(例如内耳与视觉提示)和物体变形(由于瞳孔距离的变化)的体验在个体之间具有很大的差异性。仅仅因为你对它感觉良好并不意味着每个人都对它感觉良好!用户测试总是必不可少的。_
02
用户界面设计
- VR 中交互元素的“物理”设计应该提供特殊用途。
- 对于任意动作,每个交互对象都应做出响应。
- 使用文本清楚地描述必要的手势。
- 交互元素应适当缩放。
- 将文本和图像放置在略微弯曲的凹面上
2.1危险的直觉在设计中,直觉是一个危险的词,它是由我们熟悉的事物驱动的高度个人化的假设。没有两个人有相同的直觉,但我们受物理世界的训练,我们会因为一些体验触发出相应的期望。最可靠的“直观手势”是指我们通过功能可供性引导用户做出正确手势的手势。当交互依赖于用户以某种方式移动或做出特定姿势时,可以创建功能可供性来鼓励这一点。在现实世界中,我们从不会思考再三后再去用手去控制物体,因为我们知道该怎么做。通过思考我们如何理解现实世界的对象,你可以利用手的力量来实现数字体验——以用户易于理解的方式连接虚拟世界和现实世界。2.2语义和响应手势手势分为两类:语义和响应。 语义手势 基于我们对世界的看法。它们因人而异,因此难以追踪,但了解它们对用户很重要。例如在提到另一个人时指着自己就会感觉很奇怪。
响应式手势 响应于特定对象的人体工程学和可供性。它们是具体的、可落地的、易于跟踪的。由于特定交互的范围有限,因此多个用户必须执行完全相同的手势。
通过利用用户对现实世界物理交互的理解,并避免在语义方面没有意义的手势,我们可以告知和指导他们使用数字产品。从这时开始,扩展用户对数据的理解的机会是无穷无尽的。
2.3创造可供性
在工业设计领域,“可供性”是指指导用户使用该对象的对象的物理特性。这些方面与指示在用户操作时对象将执行哪些功能的方面相关(但不同)。精心设计的工具可以提供其预期的操作,对不正确的使用会提供消极的反应。
在运动控制的上下文中,良好的可供性至关重要,因为用户必须以预期的方式与对象交互。2D Leap Motion 应用程序要适应集中在鼠标和键盘周围的传统UX设计原则。VR 开辟了在物理可供性上建立更多交互的潜力。以下是在 VR 中设计交互的几个最佳实践:
对象的响应越符合物理交互模型,可以正确响应的交互范围就越广。 例如,一个只能通过从正确方向输入才能按下的按钮需要非常清晰的示能,本质上这个按钮只需要看起来“可推动”即可。
交互越具体,可供性应该出现的越具体。 换句话说,正确的可供性只能以一种方式使用。这可以有效地“诱使”用户做出正确的动作,并阻止他们犯错误。反过来,这使UI更加高效和易于使用,并减少了跟踪错误的机会。
寻找可以反映在自己项目中的现实世界的启示。 到处都有可供性,正如我们之前提到的,这些可供性构成了我们对世界如何运作的最常见直觉的基础:
- 圆形门把手和推杆。 圆形门把手可以舒适地贴合在你的手掌中,而推杆具有宽阔的表面,可用于按压。即使不假思索,你也知道拧圆形门把手。
- 滑板预防措施。 见过户外栏杆上的小木桩吗?这些对于任何不想磨平轨道的人来说几乎是看不见的——但滑冰者会发现它们很烦人,然后就去别处了。
- 鼠标按钮与触摸按钮。 鼠标激活的按钮看起来小到可以用鼠标敲击,而触摸屏按钮大到可以用手指敲击。
2.4一切都应该是被动的对于任意动作,每个交互对象都应做出响应。例如,如果某物是一个按钮,任何随意的触摸都应该引起按钮的运动,即使该运动并不代表着按钮被按下。当这种情况发生时,物体的动力学反应应该与心智模型相吻合,允许人们移动肌肉与物体互动。因为Leap Motion控制器不提供触觉响应,所以使用其他提示来显示用户已与 UI 元素交互非常重要。例如,在设计按钮时:
- 使用手的阴影来指示用户的手相对于按钮的位置
- 从按钮上创建一个可以反映在手上的光晕,以帮助理解深度关系
- 确保按钮根据用户的压力量(Z-press)移动
- 使用声音来指示按钮何时被按下(“点击”)
- 为交互小部件创建特定的悬停状态和行为
如果做得有效,人们会在与场景互动时期待自己感到触觉体验。然而,如果一个物体看起来是无形的,人们就没有它的心理模型,也无法可靠地与之交互。2.5手势说明虽然可供性很重要,但基于文本或音频的教程提示对于初次使用的用户也很重要。请务必清楚地描述预期的交互,因为这将极大地影响用户进行交互的方式。
例如,如果你说“举起你的拳头”,用户可以用许多不同的方式来理解它。然而,如果你说“完全打开你的手,然后握拳,然后重复”,用户将完全张开他们的手,然后再完全合上它,然后再重复。使用可靠跟踪的动作和手势,并尽可能具体地解释,以获得最佳结果。
或者,你可以使用我们的序列化 API 来记录和回放手部交互。有关其工作原理的示例,请查看我们关于设计Playground的文章,该文章在 GitHub 上发表。
2.6交互式元素定位
适当的缩放。 交互元素应该根据预期的交互进行缩放(例如全手或单指)。一根手指目标的实际尺寸不应小于 20 毫米。这确保了用户可以准确地击中目标,而不会意外触发旁边的目标。
限制意外的交互。 根据界面的性质,要触摸的组中的第一个对象可能会暂时锁定所有其他对象。确保将 UI 元素隔开,以免用户意外触发多个元素。
限制手部互动。 使手的单个元素能够与按钮和其他 UI 元素交互——通常是食指的指尖。相反,场景中的其他附近元素不应该是交互的。
2.7文本和图像的易读性
虽然 VR 在许多方面都令人惊叹,但有时渲染文本也会出现问题。由于分辨率限制,只有 FOV 中心的文本可能看起来清晰,而边缘的文本可能看起来模糊,除非用户转身直接查看。出于这个原因,一定要避免使用长行文本,而使用像我们的Scroll Widget这样的可滚动列。
另一个问题来自镜头失真。当用户的眼睛扫过文本行时,瞳孔的位置会发生变化,这可能会导致失真和模糊。此外,如果与文本的距离发生变化(例如,文本位于靠近用户的横向扩展平面上),那么用户眼睛的焦点也会发生变化,这也会导致失真和模糊。
避免此问题的最简单方法是将文本的角度范围限制在靠近用户视野中心的位置(例如,仅当用户直视表面时才使文本出现在表面上)。这将显着提高可读性。

03
交互设计
- 除非是用户驱动的,否则不应发生任何移动。
- 请记住,人的手自然会以弧线而不是直线移动。
- 限制用户需要学习的手势数量。
- 所有交互都应具有不同的启动和完成状态。
- 确保用户可以与手遮挡的对象进行交互。
3.1将动作限制为交互
VR 的最大障碍之一是模拟器晕动症(simulator sickness),这是由不同感官输入(即内耳、视野和身体位置)之间的冲突引起的。一般来说,没有被用户控制的明显的移动(比如房间里的移动,而不是单一的物体移动)会引发恶心的感觉。相反,能够控制运动会减少晕动病的体验。
- 显示器应始终响应用户的动作,无一例外。即使在菜单中、游戏暂停时或过场动画中,用户也应该能够环顾四周。
- 不要在没有用户输入的情况下发起任何运动(包括改变头部方向、视图平移或视野)。
- 不要旋转或移动地平线或环境的其他大型组件,除非它与用户的真实世界运动相对应。
- 通过奖励(但不要求)大量环顾四周的体验来减轻颈部压力。尽量限制外围的运动。
- 确保虚拟摄像机以与头部和身体运动一致的方式旋转和移动。(有关如何使用 Leap Motion 控制器实现这一点的更多详细信息,请参见第 5 部分:空间和透视图。)
3.2人机工程学
基于人体工作方式的设计对于将任何新界面带入生活至关重要。我们的身体倾向于以弧线而不是直线移动,因此通过在 3D 空间中允许弧线来进行补偿很重要。例如,当在 Z 方向上进行手部移动时,用户本身也会进行 Y 方向的移动。当用户沿 X 轴移动时也是如此——此运动将导致用户也创建 az 移动。

手部动作也可能因姿势而有很大差异。例如,在跟踪食指时:
- 举起肘部在固定的肩膀上旋转:在 X 和 Y 轴上徘徊。
- 在桌子上固定肘部转动:在 Y 中徘徊
- 以手腕为中心的运动,带有放松的指数:最小的徘徊,非常小的 Z 深度
3.2限制学习手势用户可以记住的手势数量非常有限。在开发运动控制时,一定要建立在一个基础集上,或者尝试组合手势以获得更高级的功能。更好的做法是创建用户会响应的特定可供性,而不是必须学习特定的姿势或动作。3.3消除歧义
所有交互都应具有不同的启动和完成状态。开始和停止越模糊,用户做错的可能性就越大:
- 清楚地描述预期的姿势以及用户应该在哪里握住他们的手来做那个姿势。
- 如果预期的交互是动作,请明确指示用户可以在哪里开始和停止动作。
- 如果交互是对一个对象的响应,从对象的大小和形状上说清楚如何开始和停止交互。
3.4手遮挡物体
在现实世界中,人们经常与被手遮挡的物体进行交互。通常,这是通过使用触摸提供反馈来实现的。在没有触摸的情况下,你可以使用以下一些技巧:
- 提供音频提示以指示交互何时发生。
- 当靠近 UI 元素时,使用户的手半透明。
- 使对象足够大,以便在用户的手和手指周围看到。(有关缩放的更多信息,请参阅交互式元素定位部分。)
- 避免将对象放置在场景中过高的位置,因为这会迫使用户举手并挡住他们的视线。(有关详细信息,请参阅理想高度范围部分。)
- 在设计手部交互时,通过使用 VR 头戴设备观察你的手来考虑用户的视角。

3.5运动
世界导航是 VR 中最大的挑战之一,除了在Holodeck式空间中四处走动之外,没有真正无缝的解决方案。通常,使用Leap Motion进行导航的最佳VR应用程序的中心不是围绕用户以非物理方式“走动”,而是在不同状态之间转换。以下是一些有趣的运动实验:
- _World of Comenius:_ 这个教育应用程序具有发光的球体,可以轻按这些球体从一个地方移动到另一个地方。
- _Fragmental:_ 来自Hovercast VR 菜单系统,Fragmental的导航控件让你可以围绕一个中心轴旋转。
- **VR Intro and Weightless:** 自乔治·里夫斯的超人时代以来,双手飞行一直是文化试金石。这是赋予用户超能力的好方法,但除非在简短的演示中或与其他交互式元素一起使用,否则它会让人感到厌烦。
- **Plantarium:** Joyball 小部件可以轻松地从舒适的姿势以小位移移动,同时还提供有助于定位用户的指南针数据。
- **Three.js Camera Controls:** Isaac Cohen 的这组实验探索了用户导航 3D 空间的几种不同方式。
3.6声音特效
声音是沉浸式VR的一个重要方面。结合手部追踪和视觉反馈,可以用来创造触觉的“幻觉”。它也可以非常有效地传达交互的成功或失败。
04
针对VR跟踪进行优化
- 包括安全姿势以避免一切都是互动的“点石成金*”。
- 鼓励用户保持手指张开。
- 将交互元素保持在办公桌高度和视线水平之间的“金凤花区域*”中。
- 过滤掉不可信的手。
- 使用视觉反馈来鼓励用户将手保持在跟踪区域内。
- 避免涉及控制器不可见的手指的交互。
*点石成金(the Midas touch):故事的末尾因为主人公点石成金的能力变得生活不能自理。
*金凤花区域(Goldilocks zone):金凤花区域是指使智慧生命成为可能的狭窄参数频带。在这里指使得交互成为可能的区域。这两个词语都指一些比喻。
4.1传感器的始终开启
Leap Motion控制器会有“实况转播”或“点石成金”问题。这意味着你的演示必须具有安全的姿势,以便用户可以安全地通过设备的视野而无需交互。基于手势的交互应该以特定的手势开始,这些手势很少是随意运动的一部分(例如握拳然后张开手指)。
但是,安全绝不应该以牺牲速度为代价。无需暂停即可开始交互,不然你的用户会感到沮丧。
4.2平张手只要有可能,鼓励用户保持手指张开,双手垂直于视野。这是迄今为止最可靠的跟踪姿势。你可以通过要求从该姿势启动交互,或在检测到该姿势时提供积极的指示来鼓励这一点。4.3理想高度范围
场景中的交互元素通常应该位于桌面高度和视线水平之间的“金凤花区域”。以下是你在金凤花区域之外需要考虑的事项:
书桌高度。 将交互式元素放置在桌面高度或以下要小心。因为在该高度通常有许多红外反射物体,这可能会导致跟踪不良。(例如,浅色或有光泽的桌子会使控制器的相机曝光过度。)
高于视线水平。 场景中高于视线水平的交互对象可能会导致颈部劳损和“大猩猩手臂”。用户在尝试使用对象时也会用自己的手遮挡对象。有关可以弥补这一点的设计技术,请参阅第 2 部分中的手遮挡对象。
4.4难以相信的手
Leap Motion API会根据用例返回一些可以安全丢弃的跟踪数据。头戴式设备可能会检测到给定情况下完全不可信的手。使用置信度 API (the Confidence API)消除置信度值较低的手。最多允许一只右手和一只左手,并且只为这两只手设置动画。
4.5FOV边缘
避免在靠近视野边缘或水平时需要手静止的交互。这两种配置都会导致手的自发运动。为帮助解决FOV问题,请使用置信度 API 并过滤持有的对象。
4.3看不见手
如果用户看不到他们的手,他们就不能使用它。虽然这对开发人员来说似乎很明显,但对用户来说并不总是如此——尤其是当他们专注于他们试图操纵的对象而不是看着他们的手时。这里有一些技巧可以让用户清楚地知道他们必须始终保持他们的手在视线范围内:
- 消失的皮肤。 为手创建叠加层,例如机器人手、太空服或外星人皮肤,或包裹直通手图像的发光(可通过Image Hands 资产获得)。当跟踪可靠时,覆盖显示为完全不透明。当 置信度 API 值下降时,叠加层会淡出或消失。这种可供性可用于让用户知道跟踪器何时看到手,何时没有。
- 错误区。 划出一个清晰的安全区,以指示手应该放在哪里。你可以在用户的手进入(或退出)该区域时通知用户,只需更改屏幕该区域的颜色或不透明度即可。
- 上下文正确的持久状态。 如果用户抓住某物,那该物应该一直在他们手中,直到他们松开它。如果他们的手离开视野,物体也应该顺利退出。
- 失败与退出。 可以将跟踪失败(当手突然从视野中心消失时)与跟踪退出(当手在视野边缘或附近消失时)区分开来。你的应用程序应该以一种产生平滑且合理的运动的方式处理这些,而不会导致意外的交互。
4.3手指捏合
与任何光学跟踪平台一样,重要的是要避免已知未知数。Leap Motion 跟踪软件包括“目标姿势”,在没有直接视线数据的情况下,它将默认使用这些姿势,因此可以正确识别设备视线之外的手指姿势。然而,这个姿势可能无法可靠地与其他姿势区分开来。
因此,当手指不在设备的视线范围内时,请务必避免依赖于手指位置的交互。例如,如果允许捏合,则应该只有在控制器可以清楚地看到手指时才可能。类似地,当手掌背离设备时,最可靠地跟踪抓取。
05
手和身体
- 创建或选择适合设置的虚拟手。
- 虚拟手的位置应尽可能接近真实世界的位置。
- 仅在你可以期望得到合理同意的情况下渲染用户的身体。虽然脱离实体令人不安,但拥有多个不一致的身体通常会更糟。
5.1选择你的手对于 Unity 项目,我们强烈建议你将Image Hands 资产用于你的虚拟手。该资产通过将你的手的原始图像投影到可以与现实世界空间中的其他对象交互的 3D 网格中,将实时视频的绝对真实性与我们经典被操纵手的完整交互性和 3D 行为相结合。你可以看到的网格部分被双 Leap Motion 相机的直通覆盖。每个摄像头都提供了你手部的单独视图,因此磨所看到的内容具有实际深度。

这种混合效果在 VR 中具有强大的影响力,因为你的真实手现在可以真正穿过(或消失在)虚拟对象。手与其他 3D 对象可以正确交互,因为它们具有你期望的交互和视觉功能。这种方法还减少了抖动效应,因为不再需要担心非人工操纵的手。虽然 VR 中的手部图像可能会移动或变得透明,但它不会突然向错误的方向移动。5.2手的位置
正如准确的头部跟踪可以将你置于虚拟世界中一样,手部跟踪可以增强你所在位置的感觉。相反,当手出现在错误的位置时,你可能会感到迷失了方向。为了增强沉浸感并帮助用户依靠本体感觉来控制动作和理解深度,虚拟手的位置必须尽可能与现实世界的对应物相匹配。5.3身体姿势
通过提供与场景中元素的身体关系可以增加用户的沉浸感。仅当用户可能对齐和物体对齐时才为用户创建头像。例如,如果用户在游戏中坐在椅子上,你可以预期他们在现实生活中也会这样做。另一方面,如果用户在游戏中的场景中移动,他们不太可能在现实生活中移动。
人们通常对没有身体感到舒服,这是由于经历了无形的观察(电影)以及由于在一个人的正常视野(站立向前)中自己的身体的存在最少。然而,添加第二个独立移动的身体是会让人感到陌生的,并且与用户的本体感觉不一致。
06
空间和视角
- 调整手的比例以匹配你的游戏环境。
- 对齐现实世界和虚拟相机以获得最佳用户体验。
- 使用 3D 电影技巧来创造和加强深度感。
- 由于单目镜头对焦和双目瞄准之间的差异,渲染距离小于 75 厘米(触手可及)的物体可能会给一些用户带来不适。
- 为虚拟对象和 UI 元素使用适当的参考框架。
- 使用视差、照明、纹理和其他提示来传达深度和空间。
6.1控制器位置和旋转
要将Leap Motion跟踪带入VR体验,你需要在场景中使用(或创建)一个虚拟控制器,该控制器连接到你的VR眼镜的相机对象。在本节中,我们将使用Oculus Rift Unity插件作为示例,但这种方法也可以应用于其他眼镜。
默认情况下,两个Oculus摄像头相隔 0.064,这是人眼之间的平均距离。以前,要使控制器居中,你需要将其沿x轴偏移0.032。由于物理世界中的Leap Motion Controller距离你的真实眼睛大约 8 厘米,因此你还需要在 z 轴上将其偏移 0.08。
但是,Oculus 0.4.3.1B+ 包含一个位于左眼锚(LeftEyeAnchor)和右眼锚(RightEyeAnchor)之间的“中间锚(CenterEyeAnchor)”。这意味着可以将手控制(HandController)的对象直接附加到中间锚而沿 x 轴没有偏移。假设手控制是中间锚的子级,你可能需要使用两种可能的 XYZ 配置:
- 匹配通过场景: 0.0、0.0、0.0 并根据以下部分的增强现实案例进行缩放。
- 匹配现实生活: 0.0、0.0、0.08。
请注意,由于眼柄效应,直通视频中的对象也会显得更近一些,这是我们致力于设计嵌入 VR 耳机的模块的众多原因之一。
6.2增强与虚拟现实

对于 VR 体验,我们建议使用 1:1 的比例,以使虚拟手和物体看起来尽可能逼真和自然。然而,对于增强现实,需要调整比例以匹配来自控制器的图像和人眼。适当的缩放可以通过将场景中的相机移动到它们的正确位置来完成,从而增加所有虚拟对象的比例。
出现此问题是因为 Leap Motion Controller 传感器相距 40 毫米,而人眼平均相距 64 毫米。未来为虚拟现实设计的 Leap Motion 模块将具有 64 毫米的瞳距,从而消除缩放问题。
6.3定位视频直通
使用 Image API 时,重要的是要记住视频数据不会“占用” 3D 场景。因此,由于图像从某个有利位置代表整个视图,而不是特定对象,因此它们不应像其他 3D 对象那样根据世界变换。相反,无论你的头部如何倾斜,图像位置都必须保持锁定,即使其内容发生变化它也得根据你的头部运动以反映你在现实生活中看到的内容。
要实现视频直通,请跳过模型视图矩阵变换(通过将模型视图设置为单位矩阵)并仅使用投影变换。在这个投影矩阵下,定义一个坐标为 (-4, -4, -1), (4, -4, -1), (-4, 4, -1) 和 (4, 4, -1) 的矩形就足够了,可以是任何单位。然后,使用我们的图像文档中提供的片段着色器对其进行纹理处理。
6.4深度线索
无论你使用的是标准显示器还是 VR 眼镜,都很难判断附近物体的深度。这是因为,在现实世界中,你的眼睛会动态评估附近物体的深度——根据物体在空气中的远近,弯曲和视角转换。使用像 Oculus Rift 这样的头显,用户的眼睛视角将保持在无限远处。
在设计 VR 体验时,你可以使用 3D 电影技巧来创建和加强深度感:
- 远处的物体失去对比度
- 远处的物体出现模糊和蓝色/灰色(或透明)
- 附近的物体显得锐利且色彩饱满/对比度高
- 手的阴影投射到物体上
- 物体光反射到手上
- 声音可以营造深度感
6.5渲染距离
可以渲染对象的距离将取决于所使用的 VR 耳机的光学器件。(例如,Oculus 建议 Rift DK2 的最小范围为 75 厘米。)由于这超出了 Leap Motion 的最佳跟踪范围,因此你需要让交互式对象出现在可触及范围内,或在最佳跟踪范围内响应触及范围Leap Motion 设备。6.6虚拟安全护目镜
作为人类,我们已经进化出非常强烈的恐惧反应来保护自己免受飞来我们眼睛的物体的伤害。除了渲染交互式对象的距离不小于建议的最小距离外,你可能还需要采取其他措施来确保对象永远不会离观看者的眼睛太近。可以创建一个护盾,将所有可移动物体推离用户。6.7多个参考系
在任何游戏引擎中,交互元素通常相对于某个参考系是静止的。根据上下文,你有许多不同的选择:
- 世界参考系:物体在世界上是静止的。
- 用户身体参照系:物体随用户移动,但不跟随头部或手部。
- 头部参照系:对象在用户视野中保持位置。
- 手部参照系:对象握在用户手中。
在规划场景、不同的交互元素和用户的手如何相互关联时,请务必牢记这些参考框架。
6.8视差、光照和纹理
真实世界的感知线索在帮助用户定位和导航他们的环境方面总是有用的。照明、纹理、视差(当用户移动时,物体看起来相对于彼此移动的方式)和其他视觉特征对于向用户传达深度和空间至关重要。
ABOUT US

参考文章:
作者:
LeapMotion
译者:糖醋排菇
为尊重版权和译者
转载请联系我们