Google VR SDK的Unity基础讲解

2016年11月25日 15:05 0 点赞 0 评论 更新于 2025-11-21 20:52

在Unity编辑器的VR盒子模拟

VR控件与常规手机应用程序有很大不同。在VR应用程序中,需要将真实世界中用户的运动与相机进行匹配。用户无法像在普通手机应用中那样轻触屏幕,而是使用Cardboard盒子或Daydream控制器上的触发器。并且,用户通过靠近屏幕的镜头来观察三维场景中的所有内容。

为了让您更轻松地模拟VR体验,我们为Unity的Google VR SDK添加了以下额外输入功能:

  • 基于鼠标的头部跟踪:在播放模式下,按下Alt键并移动鼠标,相机可以水平移动,围绕场景上下倾斜,就如同用头部移动VR观察器一样。使用Ctrl键与鼠标配合,可模拟头部从一侧到另一侧的倾斜。
  • 模拟按下触发器:在播放模式下,在Cardboard视口中使用鼠标单击即可模拟用户按下触发器的操作。此外,还可以在播放模式下通过USB连接手机与DayDream控制器模拟器。
  • 模拟失真校正:在播放模式下,相机将呈现一个图像效果,模拟与手机上纸板镜头相同的失真校正。您可以在Unity编辑器“检视器”中的模拟设置标题下,编辑GvrViewer属性,选择要模拟的手机型号和视口模型。

注意:此模拟设置仅在编辑器中播放场景时适用,对实际的手机没有影响。要使用编辑器中的VR模式,需安装适用于Unity的Google VR SDK,并向场景中的对象添加GvrViewer脚本,您可以简单地将GvrViewerMain预制件添加到场景中。

启用立体渲染

使用Unity Daydream技术预览版

如果您使用的是Unity Daydream的技术预览版,请转到播放器设置并启用支持的虚拟现实。在新的虚拟现实SDK部分,选择“+”图标,然后根据您正在开发的应用程序选择Daydream和/或Cardboard。

使用旧版本的Unity

如果您使用的是旧版本的Unity,可通过将GvrViewer脚本附加到场景中的对象来为场景添加VR支持,您可以简单地将GvrViewerMain预制件添加到场景中。点击播放,您应该能看到一个立体视图。

与APP互动

当通过立体相机与应用程序交互时,会面临许多独特的挑战。使用VR盒子时,用户通常无法点击屏幕的特定部分。所有UI元素都必须在每只眼睛的视图中复制,否则用户无法正确看到它们。并且,这些UI元素还必须放置在虚拟空间中,以便用户能够聚焦到它们。由于具备头部跟踪功能,放置选项有所增加,例如,UI可以放置在用户的一侧,或在正常视线之上。

凝视

与VR应用程序交互的常见方式是通过凝视,即用户正在看的对象。Unity的Google VR SDK提供了两种主要的实现凝视的方式:

使用GvrGaze

GvrGaze脚本允许您通过注视轻松地与游戏对象进行交互,但它与uGUI不兼容。要使用它,将脚本从Assets / GoogleVR / Scripts / UI / GvrGaze拖动到相机上。它会向实现IGvrGazePointerIGvrGazeResponder的对象发送事件。

使用GazeInputModule

GazeInputModule脚本是Unity事件系统的输入模块,它根据用户的注视选择GameObjects。要使用它,将Assets / GoogleVR / Scripts / GazeInputModule中的脚本添加到场景的EventSystem对象。

注意:附加到EventSystem的输入模块的顺序决定了它们的优先级。如果StandaloneInputModule的优先级更高,那么在鼠标移动时它将处理事件,这可能会干扰在编辑器中使用鼠标模拟凝视。因此,您可能需要禁用StandaloneInputModule,或将GazeInputModule移到组件列表的上方。

与不同元素交互的设置

  • 与UI元素交互:要与UI元素交互,请将“画布渲染模式”设置为“世界空间”,并将事件相机设置为由StereoController脚本(直接或作为父级)控制的相机,在大多数情况下,这将是主相机。
  • 与3D对象交互:要与场景中的3D对象交互,请向事件相机添加PhysicsRaycaster组件。每个交互式对象上必须有一个脚本,以响应生成的事件,可以使用EventTrigger或在脚本中实现一些标准的Unity事件接口。同时,对象也需要一个collider组件。

准星

如果您想添加一个可视提示,让用户看到他们的注视点,可以使用GvrReticle脚本。一个简单的方法是,将GvrReticle预制拖放为主相机的子节点。每当您注视响应触发器的对象时,它会绘制一个点,并扩展为一个圆。如果事件相机具有PhysicsRaycaster,则适用于带有Collider组件的3D对象。

注意:一定要设置任何射线投射器忽略准星层。特别地,Canvas的Graphics Raycaster应该设置为不被十字线遮挡。

Daydream控制器

如果应用程序的目标平台是Daydream平台,您还可以使用Daydream控制器作为输入设备。将GvrControllerMain预设添加到您的场景中,并实现Controller API以使用控制器。

延迟渲染和图像效果

这些效果通常不能正常工作,除非使用它们的相机正在绘制到全屏或目标纹理。但在并排立体声中,每只眼睛只绘制到屏幕的一半,并非全屏。在这种情况下尝试使用这些效果,通常会导致两只眼睛的图像之一被拉伸到整个屏幕上。

如果需要使用延迟渲染或图像特效,可以通过先将每个眼睛的视图渲染到一个临时纹理(Unity认为它是“全屏幕”),然后将纹理嵌入到窗口中来解决。不过,这会导致帧率损失,因此默认情况下不启用。

StereoController的直接渲染复选框决定是直接绘制到窗口(速度更快,但没有效果),还是渲染到临时纹理,然后进行复制(速度较慢,但可实现效果)。此外,对于图像特效,确保在每个眼睛相机上复制主机的图像效果组件。为了降低帧率成本,您可以选择省略其中的某些组件。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章