1. 程式人生 > >Unity使用UGUI進行VR遊戲的介面開發

Unity使用UGUI進行VR遊戲的介面開發


我不知道有多少同學是跟我一樣,在開發VR遊戲中,是使用的面片或者模型來做的UI介面,響應簡單的射線點選或者碰撞事件,來做的一些互動。但是如果想實現一個滾動文字或者滑動條的控制元件,就顯得比較麻煩。

後來有同學跟我討論過是否可以使用UGUI來做VR遊戲介面,當時考慮到UGUI的3D介面也是通過射線響應,感覺是應該是可行的,正在準備開始寫的時候,又發現了一個好東西,原來Oculus已經出了一個使用UGUI的Demo,哈哈,我比較懶,就用來學習使用一下。
Unity5.2 Oculus UGUI Demo 連結:https://static.oculus.com/downloads/OVR_UI_Demo_5_2.zip


OculusUnity SDK 連結:https://developer3.oculus.com/downloads/game-engines/0.1.3.0-beta/Oculus_Utilities_for_Unity_5/

看了一下demo,Oculus UGUI是通過用眼睛發出射線,與Canvas互動,上面有一個圓圈模擬滑鼠的點,通過頭的不停擺動可以移動圓圈,告訴我們滑鼠的移動位置,然後通過手柄的A鍵,模擬滑鼠的按下和放開。你就可以看著一個滑動條按住A鍵就能去拖動(VR的操作都在體驗上,每次到這個時候,我都不知道怎樣去形容才更好理解,有興趣的 ,還是自己動手體驗一下)。同時,它還通過整合物理射線去響應與3D物體的互動,還集成了滑鼠操作。

然後結合自己的專案需求,我們需要處理htc和oculus兩種裝置的輸入,而且決定不用頭部來發射射線,而使用手柄來做射線操作,感覺用頭部操作,並不是很方便,而且決定去掉滑鼠的操作。整理好需求,我們就主要來討論將Oculus UGUI Demo更改到兩種裝置都能使用,這裡就以更改為htc的操作為例。

1.開啟OVR_UI_Demo,這裡會報一些錯誤,那是因為你沒有匯入Oculus的sdk,但是暫時也不用去管,後面為了方便htc的操作,我們會更改一些操作。首先來看看幾個指令碼,看著這幾個指令碼是不是感覺特別熟悉,都是從UGUI擴充套件來的。

,本來想理一下大概的邏輯關係,其實看看也應該都明白了,大概說一下幾個指令碼的意思,

  2.1 OVRGazePointer用來確定射線的終點位置,也就是模擬我們平常的滑鼠位置;

  2.2 OVRInputModule表示輸入模式,簡單來說,就是檢測按鍵的按下或者放開,我們會用手柄的按鍵來模擬滑鼠的點選;

  2.3 OVRRaycaster表示Canvas的射線檢測;

  2.4 OVRPhysicsRaycaster物理射線檢測,後面用來與一些場景中的3D物體的互動;

  2.5 OVRRayPointerEventData的資料還是跟PointerEventData一樣,包括一些position、delta、worldSpaceRay等。

3.我們就來開始整理錯誤,首先建立一個OVRCameraRigInfor指令碼,用來存攝像機與射線物體的資訊,然後將OVRGazePointer和OVRPhysicsRaycaster腳本里的OVRCameraRig替換為我們所更改的OVRCameraRigInfor,並呼叫我們裡面所設定的變數。

4.更改操作模式,開啟OVRInputModule指令碼,註釋掉Oculus的事件,並設定一個htc的手柄變數,在這裡最好匯入htc的sdk,因為我們會用到它的一些指令碼

然後再GetGazeButtonState新增htc的右手手柄的扳機事件,忽略掉我的HTCVIVE的巨集定義,我其實已經做好了兩個設定的輸入操作,這裡我們只看htc的輸入操作

然後再在GetExtraScrollDelta新增htc 手柄的Scroll Delta,就是你在拖動滾動條或者滾動文字時所需要的移動Delta

5.到這裡好像就行了,我們可以做一個示例來看一看:

  5.1 、新建一個場景,刪除Main Camera和Directional Light,再拖入SteamVR預設裡的[CameraRig];

  5.2 在ui中新建一個Canvas,設定Render Mode為World Space,將[CameraRig]的Camera(eye)賦值給event Camera,移除它的Graphic Raycaster元件,並新增OVRRaycaster與OVRCameraRigInfor,並將Camera(eye)、Controller (right)分別給OVRCameraRigInfor

  5.3 在EventSystem中移除Standalone Input Module,新增OVRInputModule,並將Controller (right)都賦值給rightTracked與rayTransform

  5.4 在Canvas下面建立一個Image命名GazePointer,並繫結OVRGazePointer指令碼,將Canvas賦值給Camera Rig,值就是開始說的滑鼠點。然後就可以在Canvas下面建立操作介面,點選執行就能通過htc的右手手柄扣動扳機去操作介面。

6.總結:我這裡是在寫好之後,再發的文章,並沒有太多的執行截圖,只是講了一下怎麼改為支援htc的一些思路,有興趣或者不太清楚的同學可以單獨找我討論。因為是oculus的demo,將它改為支援htc就有點不地道,我這裡就不放測試工程了。