VR中Unity UI系统

来源:互联网 发布:创意域名知乎 编辑:程序博客网 时间:2024/05/16 16:18

以前做HTC VIVE开发的时候,做UI交互不需要考虑那么多事情,直接一个VRTK插件包,自己想要的功能几乎全部包含在内,可是自从OculusTouch出来以后,Oculus的操作体验又上了一个大台阶,哎,作为一个苦逼的程序员,当然又得有新工作啦,使用Oculus进行VR程序开发,那么重点来了,怎么使用Oculus的插件包进行UI交互开发?搜索半天,发现了好久以前的一个VR UI开发引导,还是英文版的,哎,尝试半天啊,各种问题。废话不多说,主题走起.................


 此处使用到的插件包为OculusSampleFramework.unitypackage,可以自行到Oculus官网下载

首先说说UnityUI包括的重要组件:

EventSystem:这玩意就相当于大脑,处理各部件间的关系

InputModules:输入模式,决定常规模式,还是支持VR交互模式

RayCasters:射线投射器,Oculus没有自己的UI系统,所以只能通过常规模式功能扩展以实现UI交互,而最简单的就是通过射线检测的位置替代常规的鼠标位置,实现交互

GraphicComponents:各种响应组件(按钮,滑块等)

 

此处进入操作流程:

第一步:添加VR摄像头OVRCameraRig

作为VR程序,最重要的就是一个VR相机了,从OVR->Prefabs目录中找到OVRCameraRig预制体,拖到当前场景中,作为摄像机。

 

第二步:创建画布Canvas并修改EventSystem的输入模式InputModule

此处创建一个简单的按钮Button,并将CanvasRenderMode设置为WorldSpace。选中EventSystem,删除其StandaloneInputModule组件并添加OVRInputModule组件。讲OveCameraRig对象下的子物体CenterEyeAnchor拖动到OVRInputModule组件RayTransform处,作为射线投射物体。

 

第三步:添加GazePointer

UI交互必须有一个指针来表明你所选的位置,搜索GazePointerRing预制体,拖动到场景中,并将OveCameraRig对象下的子物体CenterEyeAnchor拖动到OVRGazePointer组件RayTransform处。

 

第四步:Canvas画布设置

OveCameraRig对象下的子物体CenterEyeAnchor拖动到CanvasEventCamera处。替换画布Canvas上的GraphicRaycaster组件为OVRRaycaster组件,在新的OVRRaycaster对象上,把BlockingObjects下拉框的选择改为All。并将第三步的GazePointerRing拖动到OvrRaycasterPointer处。

 

OK,到此处,应该可以使用头显进行UI交互了,但是我想用手柄进行UI交互要怎么做了,简单,只需一步:

第五步:手柄交互功能

搜索OVRInspectorLoader预制体,拖动到场景中,OK,已经可以使用手柄愉快的玩耍啦。

 

VR中头显和手柄的UI交互已经完工了,但是我要想使用鼠标进行交互便于测试改咋整啊?简单

第六步:世界坐标鼠标指针

搜索CanvasPointer预制体,拖动到Canvas下作为画布的子物体,并将它拖动到画布OVRRaycaster组件的Pointer处,为画布添加OVRMousePointer组件,OK,此处就可以支持鼠标交互啦!

 

UI交互正常进行啦,那么VR中怎么实现物理对象的交互呢,也挺简单,将OVRPhysicsRaycaster组件添加到OVRCameraRig上,并将EventMask设置为Gazeble,在场景中新建一个Cube作为交互的对象,修改CubeLayerGazable,添加EventTrigger组件用以响应交互事件。OK,物理交互也实现啦!


原创粉丝点击