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