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

原文連接:http://gad.qq.com/article/detail/7181505學習

本文首發騰訊GAD開發者平臺,未經容許,不得轉載
測試


我不知道有多少同窗是跟我同樣,在開發VR遊戲中,是使用的面片或者模型來作的UI界面,響應簡單的射線點擊或者碰撞事件,來作的一些交互。可是若是想實現一個滾動文本或者滑動條的控件,就顯得比較麻煩。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的操做爲例。
spa

1.打開OVR_UI_Demo,這裏會報一些錯誤,那是由於你沒有導入Oculus的sdk,可是暫時也不用去管,後面爲了方便htc的操做,咱們會更改一些操做。首先來看看幾個腳本,看着這幾個腳本是否是感受特別熟悉,都是從UGUI擴展來的。3d

2.先給一個UGUI的源碼連接:https://bitbucket.org/Unity-Technologies/uiorm

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

  2.1 OVRGazePointer用來肯定射線的終點位置,也就是模擬咱們日常的鼠標位置; 遊戲

  2.2 OVRInputModule表示輸入模式,簡單來講,就是檢測按鍵的按下或者放開,咱們會用手柄的按鍵來模擬鼠標的點擊;事件

  2.3 OVRRaycaster表示Canvas的射線檢測;ip

  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就有點不地道,我這裏就不放測試工程了。

相關文章
相關標籤/搜索