?
HoloLens有三種溝通的技巧:視線(Gaze)、手勢(shì)(Gesture)、語(yǔ)音(Voice)。語(yǔ)音可能是所有與HoloLens溝通的方式中,最直觀好用的一種,但是有很多不確定因素,例如:身處在比較嘈雜的環(huán)境中時(shí);音準(zhǔn)不正確等,所以設(shè)計(jì)出一套用視線和手勢(shì)可以方便操作的用戶界面(UI)是很有必要的。
我們的視線是不穩(wěn)定的。我們所謂的視線實(shí)際上是一條以我們頭部為起點(diǎn),向兩眼正前方前延伸的直線,我們頭部任何微小轉(zhuǎn)動(dòng)都會(huì)被放大成為視線點(diǎn)的飄移,視線目標(biāo)距離越遠(yuǎn),飄移越明顯。
我們的脖子是人體上非常靈活的關(guān)節(jié),因此視線的飄移會(huì)向各個(gè)方向進(jìn)行,這就是為什么上面的按鈕總是不適合用視線操作——如果向左右飄移還問(wèn)題不大,但如果上下飄移,就會(huì)很容易滑出按鈕的范圍,此時(shí)點(diǎn)擊就會(huì)無(wú)效,甚至?xí)c(diǎn)擊到其他按鈕。
怎樣才能減小視線飄移的影響呢?
最簡(jiǎn)單的做法,就是讓按鈕變成正方形——這樣視線飄移時(shí),就不會(huì)輕易脫出按鈕范圍;
![讓按鈕變成正方形](/sites/default/files/inline-images/%E8%AE%A9%E6%8C%89%E9%92%AE%E5%8F%98%E6%88%90%E6%AD%A3%E6%96%B9%E5%BD%A2.jpg)
然而,如果UI做成上面那樣,仍然會(huì)有問(wèn)題:如果我們把目光從最左邊的按鈕轉(zhuǎn)移到最右邊的按鈕,我們的頭部需要旋轉(zhuǎn)一個(gè)很大的角度。這就是VR/AR設(shè)備UI的另一個(gè)問(wèn)題:我們頭部的運(yùn)動(dòng)成本,遠(yuǎn)比手上的鼠標(biāo)要高。
為了解決這個(gè)問(wèn)題,我們需要控制按鈕出現(xiàn)的位置和數(shù)量。首先,我們可以讓所有按鈕以用戶視線為中心向外展開(kāi);其次,我們減少按鈕的數(shù)量,直到所有按鈕都能擺放在和用戶視線距離相等的位置上(非官方建議,方形按鈕每次只顯示4個(gè))。這樣得到的UI,大概是下面的樣子:
![所有按鈕都能擺放在和用戶視線距離相等的位置上](/sites/default/files/inline-images/%E6%89%80%E6%9C%89%E6%8C%89%E9%92%AE%E9%83%BD%E8%83%BD%E6%91%86%E6%94%BE%E5%9C%A8%E5%92%8C%E7%94%A8%E6%88%B7%E8%A7%86%E7%BA%BF%E8%B7%9D%E7%A6%BB%E7%9B%B8%E7%AD%89%E7%9A%84%E4%BD%8D%E7%BD%AE%E4%B8%8A.jpg)
這樣的話,使用者不管想點(diǎn)擊哪個(gè)按鈕,視線都只需要移動(dòng)很小的范圍就可以達(dá)到目的,而且每個(gè)按鈕有90度的容錯(cuò)范圍,也就沒(méi)那么容易點(diǎn)錯(cuò)了。
4個(gè)按鈕不夠用,該怎么設(shè)計(jì)?
按鈕不夠用時(shí),可以使用層級(jí)菜單。具體的說(shuō),當(dāng)用戶把視線移動(dòng)到某個(gè)按鈕之后,我們可以在這個(gè)按鈕周圍,再打開(kāi)幾個(gè)新的按鈕,作為上一個(gè)按鈕的子按鈕,如圖:
![HoloLens層級(jí)菜單](/sites/default/files/inline-images/HoloLens%E5%B1%82%E7%BA%A7%E8%8F%9C%E5%8D%95.jpg)
子菜單還可以再打開(kāi)孫菜單。然而,不論菜單有多少層,對(duì)使用者來(lái)說(shuō),可以一直保證:
-
每次移動(dòng)視線距離都在一個(gè)按鈕的距離之內(nèi)
-
每次關(guān)注到的按鈕(包括當(dāng)前視線所在按鈕)一直不超過(guò)4個(gè)
因此,使用者的體驗(yàn)會(huì)保持在一個(gè)比較好的范圍之內(nèi),不會(huì)被大量的按鈕沖昏頭腦,也不會(huì)因?yàn)橐蠓纫苿?dòng)頭部而苦惱。
當(dāng)然,為了保證干凈,當(dāng)用戶的視線離開(kāi)當(dāng)前按鈕時(shí),應(yīng)當(dāng)把用戶不再關(guān)注的子按鈕、孫按鈕都關(guān)閉,以保證視野盡量干凈,只保留當(dāng)前注視按鈕所在的一支。
如何將面板顯示出來(lái)?
最初的面板應(yīng)當(dāng)從用戶視線向周圍展開(kāi),這也就意味著面板的位置應(yīng)該是:
-
以用戶視線方向作射線,將面板放在這條射線上距離用戶雙眼一定的距離(推薦2~3米)的位置
-
使面板面向用戶,以便用戶能夠看清
![HoloLens面板顯示](/sites/default/files/inline-images/HoloLens%E9%9D%A2%E6%9D%BF%E6%98%BE%E7%A4%BA.jpg)
?
這是一種最簡(jiǎn)單的做法,不管用戶朝向任何方向,都能立刻看到清晰的菜單。但是,作為混合現(xiàn)實(shí)設(shè)備,這樣來(lái)顯示可能會(huì)直接把面板插入到物體里面——真實(shí)感立刻會(huì)打折扣。因此,我們需要修正一下:
-
以用戶視線方向作射線,先與空間映射模型(Spatial Mapping)做一次碰撞
-
如果有碰撞,則把面板放在碰撞點(diǎn)上,也許可以稍稍再靠近用戶一些,以確保不會(huì)被遮擋
-
如果沒(méi)有碰撞,那就放心的把面板放在距離用戶2~3米的地方
-
使面板面向用戶
這樣,面板總算可以比較好的飄在真實(shí)世界里了。然而,如果用戶距離面板太近,打開(kāi)時(shí)可能會(huì)被巨大的按鈕嚇到,因此我們還應(yīng)當(dāng)根據(jù)面板與用戶的距離,對(duì)面板的尺寸進(jìn)行調(diào)整,使面板適合使用者的視野,不會(huì)太大也不會(huì)太小。
無(wú)論何時(shí),不能讓面板立刻跟隨用戶的視線!
面板直接跟隨用戶視線,會(huì)變得什么也不能點(diǎn),而且在用戶面前永遠(yuǎn)晃著一大片東西,在混合現(xiàn)實(shí)中是一種非常不舒服的體驗(yàn)。
如果真的希望面板能跟隨用戶,可以考慮在面板移出用戶視野范圍的時(shí)候,讓面板悄悄留在用戶的視野范圍邊緣上,這樣可以盡量不要干擾到用戶想看的主體,而需要找回面板的時(shí)候,它永遠(yuǎn)在邊緣上。
另外,面板的移動(dòng)最好要做一些延遲和平滑,不要移動(dòng)的太激烈,感覺(jué)上讓面板像小狗一樣來(lái)追用戶,而不是像膏藥一樣貼在視野里面。