一、引入
相對于HoloLens 1代,HoloLens 2在手勢輸入方面有了質的飛躍,強大的手勢追蹤功能,可以準確地識別你雙手的26處指關節(jié)。對于開發(fā)者而言,手勢輸入的可玩性也變得更加豐富,今天就來分享一下本人在HoloLens 2開發(fā)過程中所累積的關于手勢追蹤方面的經驗。
二、Hand Joint 和Hand Mesh的自定義
在Unity導入MRTK工具包以后,只需要簡單的設置,就可以啟用HoloLens 2強大的手勢追蹤功能,詳細的步驟可以參考MRTK官方的文檔,這里不加贅述。
打開新建的MRTK配置文件,找到其中的HandTracking文件,可以看到我們能夠配置的內容。
這里面的幾個內容做一個簡單的說明
a. Joint Prefab 手部關節(jié)的預制體,默認為一個小方塊
b. Palm Prefab 手掌掌心的預制體,默認為一個坐標系
c. Fingertip Prefab 手指指尖的預制體,默認為一個小球
d. Hand Mesh Prefab 手部網格的預制體,默認為灰白相間的網格。
這些Prefab你也可以自行修改和替換,修改后記得保存。下面以修改Hand Mesh Prefab為例子,展示一下效果。
除了以上修改Prefab內容來實現(xiàn)HandTracking的修改,在實際開發(fā)過程中運用的更多的還是通過代碼去動態(tài)的修改手勢的狀態(tài),具體的代碼,在MRTK使用文檔中已經有了很多示例,這里在這個方面就不展開了。
三、較為簡單的手勢使用
相信很多小伙伴已經熟知TrackedHandJoint類,在該類中可以看到能夠被追蹤的26個指關節(jié)。在有些時候,單單是讓一些游戲物體來追蹤這些關節(jié)信息,就可以達到一些不錯的效果。
比如那只讓人印象深刻的蜂鳥,它就是實時的去追蹤使用者手掌心的位置,非常有意思。
四、自定義手勢
開發(fā)屬于你自定義的手勢,大致可以分成兩種思路去實現(xiàn)
方案一
第一種方案類型為獲取TrackedHandJoint類中26個指關節(jié)信息,根據這些信息去做一些邏輯判斷,來實現(xiàn)某種手勢。示例為MRTK中自帶的示例,Assets-MixedRealityToolkit.Examples- Experimental-HandMenuLayout- Scenes- HandMenuLayoutExamples。它所實現(xiàn)的功能是當你的手掌面向用戶時候,激活事件(默認為顯示面板),同理手背面向用戶的時候,則激活另外的事件(默認為隱藏面板),效果如下。我們可以參考其中實現(xiàn)邏輯的核心代碼來感受一下實現(xiàn)思路。
以手掌位置和食指尖形成一個向量,再以無名指和食指形成一個向量,獲取這兩個向量叉乘的結果,然后判斷當前活動手部為左手還是右手,如果是右手那么結果不變,如果為左手,結果乘以-1,以此來得到一個參考向量。隨后根據手掌在世界坐標系中Position.y的數值和上面得到的一個參考向量角度差的結果與某個約定的數值作比較,以此來實現(xiàn)自定義手勢—手掌翻轉這么一個動作。
在結合了一些好看的效果以后,在HoloLens2中所呈現(xiàn)出來的最終結果:
方案二
第二種方案實現(xiàn)起來會比較簡單。實現(xiàn)思路為,在手指關節(jié)的關鍵部位綁定一些要素(例如下面會用到的Collider,也可以是一些按鈕之類的組件),當這些要素被激活的時候,觸發(fā)事件,在使用的時候,也會讓人感覺是一種自定義手勢,接下來演示的是模仿HoloLens 2中Windows按鈕的一個示例。
演示效果:
實現(xiàn)思路非常簡單,在識別到手勢的時候,Collider會一直跟隨著掌心的位置和旋轉角度,當你用另外一只手去觸碰掌心的Collider的時候,觸發(fā)我們想要的事件。
核心代碼:
五、設計意見
還有要請大家注意的是,雖然自定義出來的手勢可以非常的開放,但是還是有些手勢需要去規(guī)避。
第一種,不要去做雙手交叉或者雙手堆疊面積很大的手勢,在初期設計過程中,發(fā)現(xiàn)這種手勢識別率很低,至于為什么,其實也很好解釋,上面的手肯定會把下面的手遮擋住,基本的識別都做不到,談何手勢自定義?所以大家都不要去踩這個坑了。
第二種,設計出的自定義手勢盡可能的簡單,容錯率高。那種對于手勢精度很高或者基本不存在容錯的手勢,設計出來的意義也不會很大,也很難在應用中實際用起來。
第三種,如果可以,建議在自定義手勢中加入友好提示,一些巧妙的提示設計可以讓整個手勢看起來非常智能和充滿科技感,比如HoloLens 2中的Windows按鍵。
六、總結
最后,其實會發(fā)現(xiàn),實現(xiàn)自定義的手勢并不需要非常復雜的代碼邏輯,更多的是一種想法和設計,雖然我上面把自定義手勢的實現(xiàn)思路分類分成了兩種,但是我相信肯定還會有其他更好的解決方案,也非常希望大家可以積極地分享。
最后的最后!
HoloWorld!Best World!
來源:微軟HoloLens,作者:陶志偉
原文鏈接:https://mp.weixin.qq.com/s/MuIINidIDKbxRw386B6_QQ
投稿/爆料:tougao@youxituoluo.com
稿件/商務合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)
元宇宙數字產業(yè)服務平臺
下載「陀螺科技」APP,獲取前沿深度元宇宙訊息