1:首先,我們要有鼠標(biāo)篷就,鍵盤射亏,等輸入設(shè)備。在hololens中竭业,鼠標(biāo)就是你的光標(biāo)鸦泳,光表示跟隨你的頭部運(yùn)動的。你的tap click就是鼠標(biāo)的點(diǎn)擊永品。
101 入門
在我們看來做鹰,光標(biāo)管理,輸入管理鼎姐。凝視管理钾麸,語音管理都是分開的。在這里 我們先定義一條射線炕桨,這條射線從頭部(camera發(fā)出)
如果他碰到了某個物體饭尝,那么光標(biāo)就停在他身上,且進(jìn)行一個始終向上的旋轉(zhuǎn)
在這個案例中献宫,沒有很多的功能钥平,只是一個入門案例,那么我們要實(shí)現(xiàn)的就是點(diǎn)擊一個物體姊途,他消失涉瘾。
所以我們需要一個凝視手勢管理器 我們首先需要建立一個手勢識別器(_GestureRecognizer = new GestureRecognizer();)實(shí)現(xiàn)點(diǎn)擊功能(_GestureRecognizer.TappedEvent)在這里我們使用匿名函數(shù)來實(shí)現(xiàn)這個點(diǎn)擊的功能,他有點(diǎn)類似于Addlistener()=>xxx();如果當(dāng)前有凝視對象的話捷兰,讓他執(zhí)行我們需要的方法立叛。
那么這樣,只要我們執(zhí)行這個OnseleztZX這個方法贡茅,(類似發(fā)送消息)就能夠?qū)崿F(xiàn)點(diǎn)擊秘蛇。
然后開啟手勢識別器(_GestureRecognizer.StartCapturingGestures();)。注意顶考,如果我們不需要的話就應(yīng)該停掉(_GestureRecognizer.StopCapturingGestures();)赁还,既然是凝視手勢管理器,我們?nèi)稳恍枰趗pdate方法里面實(shí)現(xiàn)一個射線的基本功能驹沿,因為他沒有和cursor這個類相結(jié)合艘策。
這樣。就可以了甚负。戳這里下載資源包
210 凝視?
這節(jié)既然是凝視柬焕,那就和光標(biāo)相關(guān)了审残,我們主要是做一個光標(biāo)的反饋。
在hololens中斑举,光標(biāo)分類很普通的幾種:正常時候的光標(biāo)搅轿,按下的光標(biāo),抬起的光標(biāo)富玷,旋轉(zhuǎn)模型時候的光標(biāo)璧坟,移動模型時候的光標(biāo),拖拽模型時候的光標(biāo)赎懦,縮放模型時候的光標(biāo)雀鹃。
我們?nèi)稳恍枰粋€手勢管理器來實(shí)現(xiàn)我們的點(diǎn)擊功能
我們還需要一個凝視的管理器(GazeManager)來實(shí)現(xiàn)我們游標(biāo)正常的工作
?我們先定義一些基本的屬性,來增加他的可拓展性(基本的)励两。
游標(biāo)所能到達(dá)的最遠(yuǎn)的距離黎茎。
層
是否碰到物體
射線信息
碰到物體的位置
轉(zhuǎn)向?
我們可以調(diào)用其中的某些參數(shù),來實(shí)現(xiàn)一些功能当悔。
借來來時游標(biāo)管理類傅瞻,我們可以通過目前的一些狀態(tài)信息,第一通過狀態(tài)信息顯示或者不顯示當(dāng)前的光標(biāo)盲憎,第二嗅骄,通過生成銷毀的方法更新當(dāng)前的光標(biāo)(我們在手勢會講到)。例如
當(dāng)凝視管理器中的射線碰到某個物體的時候饼疙,我們才讓CursorOnHolograms顯示溺森。不然就不顯示。
當(dāng)然窑眯,最后我們要給他一個位置的肯定屏积。
這樣就可以了戳這里下載資源包
?211 手勢
既然是手勢,我們先頂一個手勢管理的類(GestureManager)
先定義一些基本的手勢
在Awake方法中訂閱手勢
我們還需要取消訂閱收拾
這些都是實(shí)現(xiàn)手勢的方法伸但,這里類似事件
假如實(shí)現(xiàn)一個導(dǎo)航手勢
這是原汁原味的寫法
如果你不清楚你當(dāng)前需要訂閱那種手勢肾请,你只需要將光標(biāo)定位到GestureRecognizer上,F(xiàn)12就可以看到所有你能夠訂閱的手勢更胖。在最后你能看到實(shí)現(xiàn)這些手勢的方法所用到的參數(shù)。這些參數(shù)都是有很重要意義的隔显。這里我們截中間的一部分圖
在這里很重要的一點(diǎn)是却妨,之前我們的凝視和點(diǎn)擊的實(shí)現(xiàn)用到的射線是兩個,但是其實(shí)看作是一個括眠。因此我們需要一個凝視的類(InteractibleManager)來管理彪标。那么凝視能做什么?當(dāng)光標(biāo)進(jìn)入的時候掷豺,物體發(fā)亮捞烟?跳動薄声?當(dāng)凝視退出的時候,物體不亮题画。不動默辨。我們采用類似點(diǎn)擊的方式來實(shí)現(xiàn)
首先我們定義兩個物體
一個是當(dāng)前的,一個是舊的苍息。這里的說法有兩種缩幸,第一,你先注視一個物體a竞思,然后又注視了一個物體b表谊,那么a就是下面的。b就是上面的盖喷,顯然a是舊的爆办。第二種是。你一直注視一個物體课梳。這個物體即使新物體也是舊物體距辆。
他在Update中的實(shí)現(xiàn)。這里的Interactible是一個穩(wěn)定用戶頭部光標(biāo)的類惦界。他的作用就是如此挑格。當(dāng)你的光標(biāo)注視這某個物體的時候,他發(fā)送一條消息給GzaeEnter沾歪。當(dāng)離開的時候給GazeExit發(fā)送一條消息漂彤。
當(dāng)然,你只要實(shí)現(xiàn)了GzaeEnter和Exit方法灾搏,不就實(shí)現(xiàn)了IFocusable這個接口嘛挫望。
當(dāng)然,我們還需要實(shí)時反饋光標(biāo)的各種形態(tài)狂窑。那么在凝視(GazeManager)的基礎(chǔ)上我們新加一個類(CursorFeedback),這個類控制光標(biāo)的各種反饋狀態(tài)媳板。
我們通過這個方法來每次實(shí)例化一個光標(biāo)
好了,到此為止了泉哈,在這里我們說了很多的基本功能蛉幸,但這些基本功能并沒有貼出他在實(shí)際應(yīng)用中和hololens的結(jié)合,我們將在后面的案例中詳細(xì)的說明丛晦。戳這里下載手勢資源包
?220 ?空間 聲音
?在使用聲音之前奕纫,我們需要在unity中設(shè)置一下他相關(guān)的屬性
這是一張3d聲音設(shè)置的屬性圖。
首先烫沙,我們還要在這里做一些基本的設(shè)置匹层,在Edit—>Audio里面
而在holokit中的空間聲音文件夾下有兩個UAudioManager和UAudioMiniManager腳本,這兩個腳本提供了一些基本的聲音的設(shè)置锌蓄,他還使用了holokit提供的差值的方法升筏。實(shí)現(xiàn)了聲音在空間的展示撑柔。當(dāng)然要想實(shí)現(xiàn)好的空間聲音的效果,你還需要在聲音的處理和優(yōu)化方面做一些工作您访。戳這里下載空間聲音所需的資源包铅忿,你會發(fā)現(xiàn)他是一個很有意思的案例。
?212 空間聲音
就當(dāng)做語音吧洋只,由于hololens內(nèi)置的語音庫只能支持英文辆沦,不支持中文,所以這個方面并不是很火识虚,而且由于他實(shí)現(xiàn)的方式簡單肢扯。所以我們只是說幾種實(shí)現(xiàn)的方式而已。
第一種:我們建一個腳本担锤,將文字轉(zhuǎn)化成語音(大寫)
通過switch方式蔚晨,將我們要執(zhí)行的情況列舉出來。然后添加SpeechInputHandler腳本肛循,
最后我們在這里做一個總結(jié)(另外一個腳本)
他也配合了按鍵的實(shí)現(xiàn)铭腕。
第二種:我們先建立一個腳本。將每一種要實(shí)現(xiàn)語音做成一種方法多糠。
通過
這個腳本展示出來累舷,而上面的KeyWord就是你要執(zhí)行的語音。首字母大寫夹孔。由于我們并沒有關(guān)聯(lián)所以我們還需要一個
將他掛在語音代碼的那個物體上作為接收被盈。
第三種方法:
我們在這里添加所需要的語音執(zhí)行的方法
他的計算速度是最好的。
我們還有一個很主要的功能搭伤,就是語音聽寫只怎。注意,由于某些原因怜俐,語音識別和聽寫是不能同事開啟的身堡。關(guān)于語音聽寫,我們會在后面的項目中具體說到拍鲤。
?230 空間掃描
對贴谎,你沒看錯,這個已經(jīng)很詳細(xì)了季稳。用
預(yù)制體和他自帶的腳本就很容易實(shí)現(xiàn)赴精。在這里舉一個很小的例子。增加這個預(yù)制绞幌,實(shí)現(xiàn)點(diǎn)擊的時候掉落一個小球。你會發(fā)現(xiàn)一忱,球會掉落到桌面或者地上莲蜘。是的谭确。關(guān)于空間掃描這里就不細(xì)說了。他涉及到空間物體識別票渠,空間物體方式逐哈,空間掃描功能,空間掃描理解问顷,錨點(diǎn)昂秃,共享,空間聲音杜窄。這個在后面的項目中會具體的講到肠骆。如果你迫不及待,請參考官方案例空間掃描官方案例而戳這里下載所需的資源包塞耕。
? 240共享假全息圖
戳這里下載所需的資源包蚀腿。首先你要有兩臺以上的hololens設(shè)備。其次扫外,你需要在python和Socket photon的知識莉钙。
這里說一下為什么是假全息圖呢?這種東西和一些市面上賣的假的羊肉是一樣的筛谚。不服看這里