Unity使用UGUI进行VR游戏的界面开发
原文链接:http://gad.qq.com/article/detail/7181505
本文首发腾讯GAD开发者平台,未经允许,不得转载
我不知道有多少同学是跟我一样,在开发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.先给一个UGUI的源码链接:https://bitbucket.org/Unity-Technologies/ui
,本来想理一下大概的逻辑关系,其实看看也应该都明白了,大概说一下几个脚本的意思,
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就有点不地道,我这里就不放测试工程了。
Unity使用UGUI进行VR游戏的界面开发的更多相关文章
- Unity User Group 北京站图文报道:《Unity3D VR游戏与应用开发》
很高兴,能有机会回报Unity技术社区:我和雨松MOMO担任UUG北京站的负责人, 组织Unity技术交流和分享活动. 本次北京UUG活动场地–微软大厦 成功的UUG离不开默默无闻的付出:提前2小时到 ...
- 我的第一个上线小程序,案例实战篇二——LayaAir游戏开始界面开发
不知不觉我的第一个小程序已经上线一周了,uv也稳定的上升着. 很多人说我的小程序没啥用,我默默一笑,心里说:“它一直敦促我学习,敦促我进步”.我的以一个小程序初衷是经验分享,目前先把经验分享到博客园, ...
- 如何有效提升Unity Gear VR游戏性能
http://www.vr186.com/vr_news/vr_technical_area/1093.html 好的,所以你决定用 Unity 来做一个 VR 游戏,并选定了三星 Gear vr 为 ...
- 在Unity中创建VR游戏
添加VR插件为了为您选择的平台创建VR游戏,我们需要下载几个插件.出于本教程的目的,我将向您展示如何上传到Android平台.要上传到iOS,您需要下载 Xcode. 现在让我们下载Unity的Goo ...
- [Unity] UGUI研究院之游戏摇杆
最近在做Unity基于UGUI的摇杆,发现了一种非常简单并且巧妙的方法,原文在这里, 不过要FQ!!http://godstamps.blogspot.tw/2015/07/unity-ugui-sc ...
- 全景VR视频游戏外包公司:技术分享使用U3D+CB制作VR游戏
随着Oculus宣布1月6日开启预售,2016年很可能成为VR游戏元年,但很多的调研显示,手游设备才是市场增长的关键,SuperData发布的报告显示,2016年全球VR游戏市场规模预计在51亿美元左 ...
- Unity GUI(uGUI)使用心得与性能总结
Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...
- Unity 3D UGUI Toggle用法教程
UGUI Toggle用法教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- GOOGLE VR SDK开发VR游戏,VR播放器之中的一个
近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...
随机推荐
- 从感知机到 SVM,再到深度学习(二)
这篇博文承接上一篇,详细推导了 SVM 算法,包括对偶算法,SMO 优化算法,核函数技巧等等,最后还提到用高度非线性的曲线代替超平面,就是神经网络的方法. 在第一篇中已经得到了最优间隔 ...
- view-xpath
https://addons.mozilla.org/en-US/firefox/ WebDriver Element Locator
- JEECG中的模糊查询
以一个使用代码生成器创建的通讯录(maillist)为例: @RequestMapping(params = "datagrid") public void datagrid(Ma ...
- Spring Cloud Eureka 自我保护机制
Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...
- [UOJ 282]长度测量鸡
Description
- 【BZOJ3573】【HNOI2014】米特运输
Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...
- Codeforces Round #408 (Div. 2)
C. Bank Hacking 题目大意:给出一棵n个节点的树,每个节点有一个权值,删掉一个点的代价为当前这个点的权值,并且会使其相邻点和距离为2且中间隔着未被删除的点的点权值加1,现在选一个点开始删 ...
- 2015 多校联赛 ——HDU5350(huffman)
Problem Description MZL is a mysterious mathematician, and he proposed a mysterious function at his ...
- hdu 5463(水水)
Sample Input 2 3 2 33 3 33 2 33 10 5 467 6 378 7 309 8 499 5 320 3 480 2 444 8 391 5 333 100 499 S ...
- [APIO2009]
来自FallDream的博客,不经允许,请勿转载,谢谢. ------------------------------------------------------ 1.Oil 给定一个n*m的矩阵 ...