原文链接: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游戏的界面开发的更多相关文章

  1. Unity User Group 北京站图文报道:《Unity3D VR游戏与应用开发》

    很高兴,能有机会回报Unity技术社区:我和雨松MOMO担任UUG北京站的负责人, 组织Unity技术交流和分享活动. 本次北京UUG活动场地–微软大厦 成功的UUG离不开默默无闻的付出:提前2小时到 ...

  2. 我的第一个上线小程序,案例实战篇二——LayaAir游戏开始界面开发

    不知不觉我的第一个小程序已经上线一周了,uv也稳定的上升着. 很多人说我的小程序没啥用,我默默一笑,心里说:“它一直敦促我学习,敦促我进步”.我的以一个小程序初衷是经验分享,目前先把经验分享到博客园, ...

  3. 如何有效提升Unity Gear VR游戏性能

    http://www.vr186.com/vr_news/vr_technical_area/1093.html 好的,所以你决定用 Unity 来做一个 VR 游戏,并选定了三星 Gear vr 为 ...

  4. 在Unity中创建VR游戏

    添加VR插件为了为您选择的平台创建VR游戏,我们需要下载几个插件.出于本教程的目的,我将向您展示如何上传到Android平台.要上传到iOS,您需要下载 Xcode. 现在让我们下载Unity的Goo ...

  5. [Unity] UGUI研究院之游戏摇杆

    最近在做Unity基于UGUI的摇杆,发现了一种非常简单并且巧妙的方法,原文在这里, 不过要FQ!!http://godstamps.blogspot.tw/2015/07/unity-ugui-sc ...

  6. 全景VR视频游戏外包公司:技术分享使用U3D+CB制作VR游戏

    随着Oculus宣布1月6日开启预售,2016年很可能成为VR游戏元年,但很多的调研显示,手游设备才是市场增长的关键,SuperData发布的报告显示,2016年全球VR游戏市场规模预计在51亿美元左 ...

  7. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

  8. Unity 3D UGUI Toggle用法教程

    UGUI Toggle用法教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  9. GOOGLE VR SDK开发VR游戏,VR播放器之中的一个

    近期一年来,VR虚拟现实和AR增强现实技术的宣传甚嚣尘上.事实上VR,AR技术非常早就有了,一直没有流行开来.不可否认价格是影响技术推广的最大壁垒. 谷歌对VR最大的贡献是提供了便宜的谷歌眼镜,依照G ...

随机推荐

  1. NetCore2.0技术文章目录

    记录NetCore2.0的学习和工作,理解对与错不重要,重要的是,我飘~~~过 ------------------------------------------------------------ ...

  2. __init__特殊方法

    __init__特殊方法不应当返回除了none以外的任何方法.

  3. sublime高亮代码导出

    何在word/博客中使用SublimeText风格的代码高亮样式 原文链接:http://www.cnblogs.com/Wayou/p/highlight_code_with_sublimetext ...

  4. 使用hue查看hdfs系统报无法访问:/user/hadoop。 Note: you are a Hue admin but not a HDFS superuser, "hdfs" or part of HDFS supergroup, "supergroup".

    出现这个问题,是因为默认的超级用户是hdfs ,我的是hadoop用户登录的, 也就是说首次登录hadoop这个用户是我的超级用户 此时只需要将hue.ini配置改为 然后重启即可.

  5. 复习HTML+CSS(6)

    n  表格和表单的嵌套顺序 n  单行文本域 语法格式:<input type="text" 属性="值"> 常用属性 l  Name:文本框的名字 ...

  6. iOS 私有API调用

    最近自己在做一个小程序,想实现一个一键设置手机壁纸的功能.但在iOS公开的API里找不到相关的方法,只能从私有API入手. 网上有不少教程,不过都不是很详细.从google和https://stack ...

  7. 开发一款APP所需要的时间

    "要多少钱""要多少时间"这应该是一个企业在打算开发一款APP时问到最多的问题了.的确,现在的人不管做什么事情都讲究计划,更何况在这个时间就是金钱的时代,企业如 ...

  8. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  9. 初学servlet之form表单

    使用doget向页面写表单,使用dopost读取表单内容,包括了单选按钮,复选框,下拉列表等等的读取方法,form的action属性不写,默认表单会被提交给请求他时用的相同的URL package a ...

  10. [Codeforces 863C]1-2-3

    Description Ilya is working for the company that constructs robots. Ilya writes programs for enterta ...