在Unity编辑器的VR盒子模拟
VR控件与常规手机应用程序非常不同。 在VR应用程序中,您将真实世界中的用户运动与您的相机匹配。 用户无法使用手机在VR中轻触屏幕,而是使用Cardboard盒子或Daydream控制器上的触发器。 最后,用户通过靠近屏幕的镜头来观察三维中的所有内容。
我们已将以下额外的输入添加到Unity的Google VR SDK,以便您更轻松地模拟VR体验:
基于鼠标的头部跟踪:在播放模式下,如果您按Alt并移动鼠标,则可以水平移动,围绕场景可以上下和倾斜,就像用头在移动VR观察器一样。 使用Ctrl与鼠标模拟头部从一侧到另一侧倾斜。
模拟按下触发器:在播放模式下,在Cardboard视口中使用鼠标单击中使用触发器模拟用户的操作。 您还可以在在播放模式通过USB连接手机与DayDream控制器模拟器。
模拟失真校正:在播放模式下,相机将呈现一个图像效果,模拟与手机上发生的纸板镜头相同的失真校正。 您可以编辑GvrViewer属性,以在“检视器”中的Unity编辑器模拟设置标题下,选择要模拟的手机型号和视口模型。
注意:此模拟设置仅在编辑器中播放场景时适用。 它对实际的手机没有影响。 要使用编辑器中的VR模式,请安装适用于Unity的Google VR SDK,并向场景中的对象添加GvrViewer脚本。 你可以简单地通过添加GvrViewerMain预制件到场景中。
启用立体渲染
如果您使用Unity Daydream的技术预览,请转到播放器设置并启用支持的虚拟现实。 在新的虚拟现实SDK部分,选择+图标,然后根据您正在做的应用程序来选择Daydream和/或Cardboard。
如果您使用的是旧版本的Unity,请通过将GvrViewer脚本附加到场景中的对象来为场景添加VR支持。 你可以简单地通过添加GvrViewerMain预制件到场景中。 点击播放,你应该看到一个立体视图。
与APP互动
当通过立体相机与应用程序交互时,有许多独特的挑战。 当使用VR盒子时,用户通常不能点击屏幕的特定部分。 所有UI元素都必须在每只眼睛中复制,或者用户无法正确看到它们。 它们还必须放置在虚拟空间中,以便用户可以聚焦到它们。 由于具有头部跟踪可用,需要增加放置选项:比如,UI可以放置到用户的一侧,或在正常视线之上。
凝视
与VR应用程序交互的常见方式是通过凝视,或用户正在看的对象。 Unity的Google VR SDK提供了两种实现凝视的主要方式:使用Unity的事件系统的GvrGaze脚本或GazeInputModule脚本。
使用GvrGaze
GvrGaze脚本允许您使用注视轻松地与游戏对象交互。 它不与uGUI不兼容。 将脚本从Assets / GoogleVR / Scripts / UI / GvrGaze拖动到相机上以使用它。 它将发送事件到实现IGvrGazePointer和IGvrGazeResponder的对象。
使用GazeInputModule
GazeInputModule脚本是Unity事件系统的输入模块,它根据用户的注视选择GameObjects。 要使用它,请将Assets / GoogleVR / Scripts / GazeInputModule中的脚本添加到场景的EventSystem对象。
注意:附加到EventSystem的输入模块的顺序决定了它们的优先级,因此如果StandaloneInputModule更高,那么它将在鼠标移动时处理事件。 当在编辑器中播放时,这可能会干扰使用鼠标来模拟凝视,因此您可能希望禁用StandaloneInputModule,或将GazeInputModule移到组件列表中的上方。
要与UI元素交互,请将“画布渲染模式”设置为“世界空间”。 将事件相机设置为由StereoController脚本(直接或作为父级)控制的相机。 在大多数情况下,这将是主相机。
要与场景中的3D对象交互,请向事件相机添加PhysicsRaycaster组件。 必须在每个交互式对象上有一个脚本,以响应生成的事件。 可以使用EventTrigger或在脚本中实现一些标准的Unity Event接口。 对象也需要一个collider组件。
准星
如果你想添加一个可视提示让用户看到他们的注视点,你可以使用GvrReticle脚本。 一个简单的方法是,拖放GvrReticle预制作为主相机的子节点上。 每当你注视响应触发器的对象时,它绘制一个点,扩展到一个圆。 如果事件相机具有PhysicsRaycaster,要带有Collider组件的3D对象。
如果使用GvrGaze脚本,您需要将十字线设置为其指向对象。 如果使用GazeInputModule,则十字线不应需要任何额外的设置。
注意:一定要设置任何raycasters忽略准星层。 特别地,Canvas的Graphics Raycaster应该设置为不被十字线遮挡。
Daydream控制器
如果应用程序目标平台是Daydream平台,您还可以使用Daydream控制器作为输入设备。 将GvrControllerMain预设添加到您的场景中,并实现Controller API以使用控制器。
延迟渲染和图像效果
这些效果通常不能正常工作,除非使用它们的相机正在绘制到全屏或目标纹理。 但在并排立体声中,这是从来没有的情况:每只眼睛只画到屏幕的一半。 在这种情况下尝试使用这些效果通常导致两个眼睛的图像之一被拉伸在整个屏幕上。
如果需要使用延迟渲染或图像特效,可以通过渲染每个眼睛的视图首先到一个临时纹理(Unity认为它是“全屏幕”),然后将纹理嵌入到窗口中解决。 这会导致帧率损失,因此默认情况下不启用。
StereoController的直接渲染复选框决定是直接绘制到窗口(更快,但没有效果)或或渲染到临时纹理,然后用blit(更慢,但可实现效果)。 此外,对于图像特效,确保在每个眼睛相机上复制主机的图像效果组件。 为了降低帧速率成本,您可以选择省略其中的某些。