基于UWP,如何快速創(chuàng)建跨多設備形態(tài)的混合現(xiàn)實應用,提供適用于HoloLens以及Windows MR頭顯的交互共享體驗?
環(huán)境配置
混合現(xiàn)實設備:至少一臺HoloLens及Windows MR 頭顯,HoloLens系統(tǒng)啟用開發(fā)者模式;
PC設備:
(1) 安裝Windows 10 秋季更新及以上版本的操作系統(tǒng),以及Unity 2017.2及以上版本,系統(tǒng)啟用開發(fā)者模式;
(2) PC配置需滿足Windows MR頭顯運行的最低要求,PC需帶有全尺寸的HDMI接口以及USB 3.0端口或等標準的適配器,用于連接Windows頭顯設備;
網(wǎng)絡環(huán)境:允許收發(fā)UDP廣播;
Windows MR頭顯控制器:一個Xbox控制手柄,與PC配對;
進行本次課程的項目下載,并進行工具安裝。接下來開始具體開發(fā)上手。同HoloLens開發(fā)類似,該場景最重要的兩個目的是實現(xiàn)應用的交互與共享。
1.兩種設備的交互識別
該部分目的是實現(xiàn)Windows Mixed Reality應用程序在兩類混合現(xiàn)實設備間的交互操作識別。通過添加應用程序,HoloLens設備用戶可以將全息影像放在現(xiàn)實世界的物理表面,使用Windows MR 頭顯的用戶可以將其放在虛擬表面。接著,開始場景刷新:在HoloLens進行Air Tap手勢操作,對于Windows MR 頭顯,需要按下Xbox 控制手柄的A按鍵。
2.設備的場景共享
實施共享操作需要確保網(wǎng)絡配置正確,才能在多設備間共享同一個虛擬世界。不同用戶雖然身處不同物理位置,卻可以在同一個虛擬世界里進行互動。比如,使用Windows MR頭顯的用戶通過添加用戶界面與邏輯進入正在進行的多人會議,用戶能夠在會議中看到其他與會者的頭像、虛擬身體、動作語言等,以及虛擬會議室的全息場景,此外,用戶甚至可以從不同的高度及角度觀察整個會議場景。
應用部署完成后,我們就能在不同設備上查看到相同的全息場景。
HoloLens與Windows MR頭顯雖然同屬Windows混合現(xiàn)實家族,但是,不同設備畢竟具備不同特性,如何才能根據(jù)設備各自屬性調整對應的畫質等級,并進行背景設置呢?這里,可以參考Unity2017.2以上版本的工具包腳本MixedRealityCameraManager.cs中靜態(tài)方法:?
實靜態(tài)方法.png)
這個方法會返回一個bool值,從而檢測設備為HoloLens(IsDisplayOpaque返回false)還是Windows MR頭顯(IsDisplayOpaque返回true)。這在部署不同設備時起到了非常重要的作用。
當部署完全息影像后,就可以通過不同設備的輸入操作與它們交互了。
注意:在Windows MR頭顯看到的沉浸式世界,由于沒有真實表面的概念,因此在代碼中對虛擬世界的虛擬物體標記為空間映射的物理層。這樣通過控制手柄的輸入指令,即朝輸入方向發(fā)出的射線就會與虛擬影像進行交互。
這個時候,就可以開始為我們的項目添加多人協(xié)同的功能。如上文所述,在把項目部署到設備上之后,會根據(jù)編譯好的代碼在你的設備上呈現(xiàn)不同的全息世界。
這里著重講一下腳本LevelControl,作為本文中最核心的游戲邏輯處理類,同時也在維護著游戲狀態(tài)。此類繼承于NetworkBehaviour類,作為一個包含網(wǎng)絡功能的腳本繼承基類,它之中封裝了大量的網(wǎng)絡通訊及處理的函數(shù)。我們之前了解到,此項目是以UNet(unity networking)技術實現(xiàn)的多玩家在線游戲,利用這個技術來保持數(shù)據(jù)的同步。下圖為代碼:

這里的CmdSendAtGoal函數(shù)內部邏輯沒被本地調用,而是在函數(shù)簽名上加特性[Command],此時每個有權限的用戶需要向主機端發(fā)送“Command”,來傳遞參數(shù)給主機端,經由主機端處理完成之后再通過網(wǎng)絡分發(fā)給所有用戶。
注意:標有[Command]屬性的函數(shù),在服務端上調用,在服務端運行,函數(shù)參數(shù)會通過網(wǎng)絡傳到服務端。這里的服務端指第一個創(chuàng)建Session的主機端。