Unity3D VR 教程之VR概述
一、Unity 对 VR 的支持
Unity 已加入对 VR 的内置支持,但目前仅针对几种特定的 VR 设备。本指南将聚焦于 Oculus 系列的 VR 设备,特别是 Oculus Rift Development Kit 2(DK2)和消费者版本的 Gear VR(这是一种手机外设,需搭配三星 Galaxy S6、S6 Edge、S6 Edge+ 或 Note 5 使用)。后续可能会有关于 Note 4 的内容,但本文暂不涉及。
除 Oculus 设备外,其他 VR 头戴设备(如 HTC Vive)也能运行 Unity 项目。若未来有新的 VR 平台加入,本文档也会相应更新。虽然本文内容对所有 VR 头戴设备基本适用,但建议仔细阅读 VR 设备生产商的手册,以获取更详细的信息。
二、在 Unity 中启用 VR
(一)环境要求
请确保已安装 Oculus runtime 0.8 以及 Unity 5.3 以上版本。
(二)开启 VR 功能
依次点击:Edit > Project Settings > Player > Other Settings > Rendering,然后在检查器面板(Inspector)中勾选“Virtual Reality Supported”。
(三)运行时获取 VR 选项状态
在运行时,可通过 UnityEngine.VR.VRSettings.enabled 属性获取该选项的状态,示例代码如下:
using UnityEngine;
using UnityEngine.VR;
public class ToggleVR : MonoBehaviour
{
// 示例:切换 VRSettings
private void Update ()
{
// 如果按下 V 键,切换 VRSettings.enabled
if (Input.GetKeyDown(KeyCode.V))
{
VRSettings.enabled = !VRSettings.enabled;
Debug.Log("Changed VRSettings.enabled to:" + VRSettings.enabled);
}
}
}
三、在 Unity 中预览 VR
开启 Unity 的 VR 功能,连接好 DK2(Oculus),进入 Play Mode,此时游戏画面会同时显示在 DK2 和 Editor 中。这种预览模式极大地加快了调试速度,开发者无需将项目打包成可执行文件并安装到 VR 设备中,就能查看修改效果。创建 VR 内容的开发者会发现,并排的图像已取代单独的图像。
需要注意的是,无需为每只眼睛单独创建摄像机,每个摄像机都会以 VR 模式进行渲染,除非指定了 Render Texture(渲染纹理)的摄像机。关于 Render Texture 的更多信息,请查阅手册。为降低每个摄像机的渲染成本,Unity 进行了一些优化,例如,一次为两只眼睛同时进行裁切和阴影渲染。
四、在 Unity 中开发 VR 的硬件和软件需求
由于 VR 是一种新型多媒体设备,在撰写本文时,存在一些硬件和软件方面的限制,以下是大致描述。
(一)硬件要求
- 帧数与刷新速率:达到相应的帧数对于良好的 VR 体验至关重要,且刷新速率需与头戴设备的屏幕一致。DK2 的刷新速率必须为 75fps,Gear VR 则需 60fps。若刷新速率低于此标准,用户会有明显感知,容易产生眩晕感。
- GPU 性能与分辨率:除了稳定的帧数,GPU 还需具备足够的性能以支持 VR 设备的分辨率。DK2 需要 75HZ、1920×1080 的分辨率;若要在 Oculus Rift(CV1)上开发,条件更为苛刻,该设备需要 90hz 和 2160 × 1200 的分辨率。
- 电脑硬件适配:若使用 DK2,需确保电脑硬件能同时满足分辨率和刷新频率的要求。许多笔记本采用芯片切换独立显卡和集成显卡,但这些芯片通常无法在 1920 × 1080 分辨率下达到 75hz,可能导致不佳的 VR 体验甚至眩晕。可参考 Oculus 的文档和 Oculus PC 指南(https://support.oculus.com/hc/en-us/articles/201835987-Oculus-Rift-Development-Kit-2-FAQ),了解支持的硬件列表。
(二)软件要求
- 操作系统
- OS X:目前可在 OS X 10.9+ 系统上运行 Oculus 0.0.5 runtime,但 Oculus 已暂停对 OS X 的开发。若使用 Unity 进行原生 VR 开发,建议使用 Windows 系统。
- Windows:Win7、8、8.1、10 均可。
- Android:建议使用 Lolipop 5.1 或更高版本。
- 显卡和驱动:请确保显卡驱动为最新版本,旧版本可能不支持。可检查 Oculus 的设备设置,确认是否支持当前驱动。
- Oculus Runtime:若要在 Unity 5.3 中使用 VR 设备支持,需使用 Oculus Runtime 0.8 或更高版本。
五、VR 示例项目
作为本教程的一部分,我们在 Asset Store 上提供了一个免费下载的示例项目。该项目可在 DK2 和 Gear VR 上运行,未来还会针对 Oculus 及其他头戴显示设备制造商的硬件进行更新。请关注 Unity blog 获取最新消息。你可在 Asset Store 中下载该项目,查看工程源码。
(一)示例场景
- 主要场景
- Intro:简单的介绍场景,包含一些基本互动。
- Menu:菜单场景,可选择小游戏进行游玩。
- Flyer:飞行游戏。
- Maze:桌面迷宫游戏。
- Target Gallery:走廊打靶游戏。
- Target Arena:360°射击场景。
- 其他场景
- InteractiveItem:演示在 VR 中与物体互动的基本方式。
- RenderScale:为图片添加渲染尺寸特效。
- Reticle:在 VR 中添加十字线(准星)的简单示例。
- Rotation:演示头部移动时物体的表现。
- Touchpad:展示如何获取 Gear VR 上触控板的输入。
(二)涉及要点
- 游戏玩法模式:自上而下的桌游玩法、扎进屏幕的星际火狐类型玩法、打靶类型玩法、360°打靶游戏玩法。
- UI 应用:在 VR 上使用 Unity UI、空间立体 UI。
- 物体互动:在 VR 上与物体互动的基本框架,包括处理“视线悬停”和“视线移出”。
- 十字线操作:十字线(类似于准星)的移动、缩放、shader 处理及恢复正常。
- 移动控制:基于头部转动的移动。
- 事件处理:处理 Gear VR 触控板事件(点击、双击、滑动),或在使用 DK2 时处理键盘和鼠标事件。
- 条件编译:为 Gear VR 和 DK2 使用条件编译。
- 相机处理:相机围绕一个点转动时避免眩晕、相机淡出、相机淡出切换。
- 对象池:项目实现了对象池的应用。
该项目主要实现了一些 VR 概念,为 VR 开发提供入门指引,同时提供了一些可重用的实例,如相机淡出、相机转场效果、在 VR 中与物体互动的框架、hold 住确认的动作、十字线的移动和缩放、平台相关的文本以及 ui 指针指示面对方向等。