1:首先,我們要有鼠標,鍵盤,等輸入設備。在hololens中,鼠標就是你的光標,光表示跟隨你的頭部運動的。你的tap click就是鼠標的點擊。
101 入門
在我們看來,光標管理,輸入管理。凝視管理,語音管理都是分開的。在這里 我們先定義一條射線,這條射線從頭部(camera發出)
如果他碰到了某個物體,那么光標就停在他身上,且進行一個始終向上的旋轉
在這個案例中,沒有很多的功能,只是一個入門案例,那么我們要實現的就是點擊一個物體,他消失。
所以我們需要一個凝視手勢管理器 我們首先需要建立一個手勢識別器(_GestureRecognizer = new GestureRecognizer();)實現點擊功能(_GestureRecognizer.TappedEvent)在這里我們使用匿名函數來實現這個點擊的功能,他有點類似于Addlistener()=>xxx();如果當前有凝視對象的話,讓他執行我們需要的方法。
那么這樣,只要我們執行這個OnseleztZX這個方法,(類似發送消息)就能夠實現點擊。
然后開啟手勢識別器(_GestureRecognizer.StartCapturingGestures();)。注意,如果我們不需要的話就應該停掉(_GestureRecognizer.StopCapturingGestures();),既然是凝視手勢管理器,我們任然需要在update方法里面實現一個射線的基本功能,因為他沒有和cursor這個類相結合。
這樣。就可以了。戳這里下載資源包
210 凝視?
這節既然是凝視,那就和光標相關了,我們主要是做一個光標的反饋。
在hololens中,光標分類很普通的幾種:正常時候的光標,按下的光標,抬起的光標,旋轉模型時候的光標,移動模型時候的光標,拖拽模型時候的光標,縮放模型時候的光標。
我們任然需要一個手勢管理器來實現我們的點擊功能
我們還需要一個凝視的管理器(GazeManager)來實現我們游標正常的工作
?我們先定義一些基本的屬性,來增加他的可拓展性(基本的)。
游標所能到達的最遠的距離。
層
是否碰到物體
射線信息
碰到物體的位置
轉向?
我們可以調用其中的某些參數,來實現一些功能。
借來來時游標管理類,我們可以通過目前的一些狀態信息,第一通過狀態信息顯示或者不顯示當前的光標,第二,通過生成銷毀的方法更新當前的光標(我們在手勢會講到)。例如
當凝視管理器中的射線碰到某個物體的時候,我們才讓CursorOnHolograms顯示。不然就不顯示。
當然,最后我們要給他一個位置的肯定。
這樣就可以了戳這里下載資源包
?211 手勢
既然是手勢,我們先頂一個手勢管理的類(GestureManager)
先定義一些基本的手勢
在Awake方法中訂閱手勢
我們還需要取消訂閱收拾
這些都是實現手勢的方法,這里類似事件
假如實現一個導航手勢
這是原汁原味的寫法
如果你不清楚你當前需要訂閱那種手勢,你只需要將光標定位到GestureRecognizer上,F12就可以看到所有你能夠訂閱的手勢。在最后你能看到實現這些手勢的方法所用到的參數。這些參數都是有很重要意義的。這里我們截中間的一部分圖
在這里很重要的一點是,之前我們的凝視和點擊的實現用到的射線是兩個,但是其實看作是一個。因此我們需要一個凝視的類(InteractibleManager)來管理。那么凝視能做什么?當光標進入的時候,物體發亮?跳動?當凝視退出的時候,物體不亮。不動。我們采用類似點擊的方式來實現
首先我們定義兩個物體
一個是當前的,一個是舊的。這里的說法有兩種,第一,你先注視一個物體a,然后又注視了一個物體b,那么a就是下面的。b就是上面的,顯然a是舊的。第二種是。你一直注視一個物體。這個物體即使新物體也是舊物體。
他在Update中的實現。這里的Interactible是一個穩定用戶頭部光標的類。他的作用就是如此。當你的光標注視這某個物體的時候,他發送一條消息給GzaeEnter。當離開的時候給GazeExit發送一條消息。
當然,你只要實現了GzaeEnter和Exit方法,不就實現了IFocusable這個接口嘛。
當然,我們還需要實時反饋光標的各種形態。那么在凝視(GazeManager)的基礎上我們新加一個類(CursorFeedback),這個類控制光標的各種反饋狀態。
我們通過這個方法來每次實例化一個光標
好了,到此為止了,在這里我們說了很多的基本功能,但這些基本功能并沒有貼出他在實際應用中和hololens的結合,我們將在后面的案例中詳細的說明。戳這里下載手勢資源包
?220 ?空間 聲音
?在使用聲音之前,我們需要在unity中設置一下他相關的屬性
這是一張3d聲音設置的屬性圖。
首先,我們還要在這里做一些基本的設置,在Edit—>Audio里面
而在holokit中的空間聲音文件夾下有兩個UAudioManager和UAudioMiniManager腳本,這兩個腳本提供了一些基本的聲音的設置,他還使用了holokit提供的差值的方法。實現了聲音在空間的展示。當然要想實現好的空間聲音的效果,你還需要在聲音的處理和優化方面做一些工作。戳這里下載空間聲音所需的資源包,你會發現他是一個很有意思的案例。
?212 空間聲音
就當做語音吧,由于hololens內置的語音庫只能支持英文,不支持中文,所以這個方面并不是很火,而且由于他實現的方式簡單。所以我們只是說幾種實現的方式而已。
第一種:我們建一個腳本,將文字轉化成語音(大寫)
通過switch方式,將我們要執行的情況列舉出來。然后添加SpeechInputHandler腳本,
最后我們在這里做一個總結(另外一個腳本)
他也配合了按鍵的實現。
第二種:我們先建立一個腳本。將每一種要實現語音做成一種方法。
通過
這個腳本展示出來,而上面的KeyWord就是你要執行的語音。首字母大寫。由于我們并沒有關聯所以我們還需要一個
將他掛在語音代碼的那個物體上作為接收。
第三種方法:
我們在這里添加所需要的語音執行的方法
他的計算速度是最好的。
我們還有一個很主要的功能,就是語音聽寫。注意,由于某些原因,語音識別和聽寫是不能同事開啟的。關于語音聽寫,我們會在后面的項目中具體說到。
?230 空間掃描
對,你沒看錯,這個已經很詳細了。用
預制體和他自帶的腳本就很容易實現。在這里舉一個很小的例子。增加這個預制,實現點擊的時候掉落一個小球。你會發現,球會掉落到桌面或者地上。是的。關于空間掃描這里就不細說了。他涉及到空間物體識別,空間物體方式,空間掃描功能,空間掃描理解,錨點,共享,空間聲音。這個在后面的項目中會具體的講到。如果你迫不及待,請參考官方案例空間掃描官方案例而戳這里下載所需的資源包。
? 240共享假全息圖
戳這里下載所需的資源包。首先你要有兩臺以上的hololens設備。其次,你需要在python和Socket photon的知識。
這里說一下為什么是假全息圖呢?這種東西和一些市面上賣的假的羊肉是一樣的。不服看這里