HoloLens有三种沟通的技巧:视线(Gaze)、手势(Gesture)、语音(Voice)。语音可能是所有与HoloLens沟通的方式中,最直观好用的一种,但是有很多不确定因素,例如:身处在比较嘈杂的环境中时;音准不正确等,所以设计出一套用视线和手势可以方便操作的用户界面(UI)是很有必要的。
我们的视线是不稳定的。我们所谓的视线实际上是一条以我们头部为起点,向两眼正前方前延伸的直线,我们头部任何微小转动都会被放大成为视线点的飘移,视线目标距离越远,飘移越明显。
我们的脖子是人体上非常灵活的关节,因此视线的飘移会向各个方向进行,这就是为什么上面的按钮总是不适合用视线操作——如果向左右飘移还问题不大,但如果上下飘移,就会很容易滑出按钮的范围,此时点击就会无效,甚至会点击到其他按钮。
怎样才能减小视线飘移的影响呢?
最简单的做法,就是让按钮变成正方形——这样视线飘移时,就不会轻易脱出按钮范围;
然而,如果UI做成上面那样,仍然会有问题:如果我们把目光从最左边的按钮转移到最右边的按钮,我们的头部需要旋转一个很大的角度。这就是VR/AR设备UI的另一个问题:我们头部的运动成本,远比手上的鼠标要高。
为了解决这个问题,我们需要控制按钮出现的位置和数量。首先,我们可以让所有按钮以用户视线为中心向外展开;其次,我们减少按钮的数量,直到所有按钮都能摆放在和用户视线距离相等的位置上(非官方建议,方形按钮每次只显示4个)。这样得到的UI,大概是下面的样子:
这样的话,使用者不管想点击哪个按钮,视线都只需要移动很小的范围就可以达到目的,而且每个按钮有90度的容错范围,也就没那么容易点错了。
4个按钮不够用,该怎么设计?
按钮不够用时,可以使用层级菜单。具体的说,当用户把视线移动到某个按钮之后,我们可以在这个按钮周围,再打开几个新的按钮,作为上一个按钮的子按钮,如图:
子菜单还可以再打开孙菜单。然而,不论菜单有多少层,对使用者来说,可以一直保证:
-
每次移动视线距离都在一个按钮的距离之内
-
每次关注到的按钮(包括当前视线所在按钮)一直不超过4个
因此,使用者的体验会保持在一个比较好的范围之内,不会被大量的按钮冲昏头脑,也不会因为要大幅度移动头部而苦恼。
当然,为了保证干净,当用户的视线离开当前按钮时,应当把用户不再关注的子按钮、孙按钮都关闭,以保证视野尽量干净,只保留当前注视按钮所在的一支。
如何将面板显示出来?
最初的面板应当从用户视线向周围展开,这也就意味着面板的位置应该是:
-
以用户视线方向作射线,将面板放在这条射线上距离用户双眼一定的距离(推荐2~3米)的位置
-
使面板面向用户,以便用户能够看清
这是一种最简单的做法,不管用户朝向任何方向,都能立刻看到清晰的菜单。但是,作为混合现实设备,这样来显示可能会直接把面板插入到物体里面——真实感立刻会打折扣。因此,我们需要修正一下:
-
以用户视线方向作射线,先与空间映射模型(Spatial Mapping)做一次碰撞
-
如果有碰撞,则把面板放在碰撞点上,也许可以稍稍再靠近用户一些,以确保不会被遮挡
-
如果没有碰撞,那就放心的把面板放在距离用户2~3米的地方
-
使面板面向用户
这样,面板总算可以比较好的飘在真实世界里了。然而,如果用户距离面板太近,打开时可能会被巨大的按钮吓到,因此我们还应当根据面板与用户的距离,对面板的尺寸进行调整,使面板适合使用者的视野,不会太大也不会太小。
无论何时,不能让面板立刻跟随用户的视线!
面板直接跟随用户视线,会变得什么也不能点,而且在用户面前永远晃着一大片东西,在混合现实中是一种非常不舒服的体验。
如果真的希望面板能跟随用户,可以考虑在面板移出用户视野范围的时候,让面板悄悄留在用户的视野范围边缘上,这样可以尽量不要干扰到用户想看的主体,而需要找回面板的时候,它永远在边缘上。
另外,面板的移动最好要做一些延迟和平滑,不要移动的太激烈,感觉上让面板像小狗一样来追用户,而不是像膏药一样贴在视野里面。