原文连接: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就有点不地道,我这里就不放测试工程了。