(三)GearVR开发应用入门教程:Unity中OculusVR的UI交互

Unity中Oculus VR的UI交互

谈到UnityUI交互,首先我们先来看下Unity的UI系统中几个关键的组成部分:
· EventSystem 
· InputModules 
· RayCasters 
· GraphicComponents: Button, Toggle, Slider 等.
EventSystem是处理所有UI事件的核心。它与其他几个部分紧密联系,例如InputModule,是它主要的事件处理来源。在Unity UI系统中,一个场景中只能有一个InputModule活跃。默认情况下,EventSystem绑定了一个鼠标输入模块(StandaloneInputModule)和一个触碰输入模块(TouchInputModule),他们分别用于处理PC端鼠标的输入以及移动设备触摸的输入监测。真正意义上的UI交互监测是在raycaster类中实现,例如GraphicRaycaster。 
raycaster负责处理可交互对象的一些设置。当一个InputModule提交了鼠标或触摸点的信息,它会轮询所有可用的raycaster,每个raycaster都会监测自己的组件是否有触发交互事件。有两种Unity内置的raycaster,GraphicRaycaster (用于Canvas)以及PhysicsRaycaster (用于非UI对象)。 
在用户点击场景时,raycaster会发出很多用于检测的射线,返回来的结果是一个对象的集合,但是用户肯定不希望一次点击同时响应不同的UI元素,这会混淆操作,而InputModule的职责就是去找到场景中最近的射线检测结果。 
然后再来看下,我们导入的Oculus Unity集合包中的东西,用Oculus提供的来替换掉我们工程里的部分组件。


 
  • 替换相机
  1. 删除场景中的Camera
  2. 添加OVR/Prefabs/OVRCameraRig预置体到场景中作为相机
  3. 将相机调整到合适的位置


 
  • 更改输入模块
  1. 选择Hierarchy中的EventSystem对象
  2. 移除用于处理常规鼠标输入的StandaloneInputModule组件
  3. 添加OVRInputModule脚本
  4. OVRCameraRig对象下的CentreEyeAnchor拖到OVRInputModuleRayTransform属性上,使射线始终从双眼中间位置发出
  5. OVRInputModule中的JoyPadClickButtonGazeClickKey分别用于设置Touch手柄和键盘上操作UI的按键


 
  • 添加凝视指针
  1. 添加Prefabs/OVRGazePointer预置体到场景中来指示当前凝视的位置
  2. 预置体上除了OVRGazePointer脚本还有一个与粒子特效有关的脚本,如不需要可以删除
  3. OVRCameraRig对象下的CentreEyeAnchor拖放到OVRGazePointer脚本的RayTransform属性上,使指针跟随射线


 
  • 设置Canvas
  1. 将需要凝视操作的CanvasRender Mode属性设置为World Space
  2. Canvas中的EventCamera设置为OVRCameraRig下的CenterEyeAnchor
  3. 移除Canvas绑定的用于监测鼠标与GUI元素交互的GraphicRaycaster组件
  4. 添加用于处理射线的OVRRaycaster脚本
  5. OVRRaycaster组件中,将Blocking Objects属性设为All,使凝视行为可以锁定场景中的其他可交互对象


 
  • 更改指针移动方式 

若希望通过其他输入设备移动指针,则进行此步,以右手Touch控制器为例。

  1. 选择EventSystem对象,把OVRInputModuleRayTransform属性改为OVRCameraRig对象下的RightHandAnchor,使射线从右手的Touch控制器发出
  2. 选择GazePointerRing对象,将OVRGazePointer脚本的RayTransform属性改为OVRCameraRig对象下的RightHandAnchor,使指针跟随射线
  • 添加世界坐标下的鼠标 

若需要为VR场景提供与凝视一起存在的鼠标操作UI的功能,则进行此步操作。

  1. Prefabs/TrackedRemote预置体添加到场景中

猜你喜欢

转载自blog.csdn.net/u013774978/article/details/130001756
今日推荐