WebVR 是未来 VR 内容访问的关键 - 立即满足,无需任何下载或安装。或者,至少我们这样认为!我们正在构建一个名为 Jump 的多平台数字游戏订阅服务,它将原生网页游戏交付到桌面、移动设备、游戏机和 VR 设备,我们已经将整个业务押在了原生网页技术上 - HTML5、WebGL、JS 以及即将推出的 WebAssembly。我们着手通过为 Jump 构建一个 Oculus Rift WebVR 游戏来展示网络在虚拟现实方面的强大功能。我们在一个月内构建了 SECVRITY。在如此短的时间窗口内,我们没有时间深入 WebVR API 来在网络上原生构建它。因此,我们在我们选择的引擎中构建了游戏 - Unity 5。
https://www.youtube.com/watch?v=fIYePfN8P8k&feature=youtu.be
SECVRITY 最好的描述可能是“打地鼠 的病毒版”。你扮演一名计算机安全专家,试图阻止蜂拥而至的病毒攻击你的全景显示器。为了禁用病毒,你需要 - 你猜对了 - 盯着当前被攻击的屏幕并点击它。虽然患上“鞭打综合征”的可能性很高,但有趣程度的可能性甚至更高,正如人们在 GDC 上 Mozilla 的展位 玩这款游戏时所证明的那样!
回到技术方面 - Unity 支持 WebGL 和 VR,但我们很快发现它们是相互排斥的,并且 Unity 的路线图上没有立即提供 WebVR。我们开始寻找弥合这一差距的方法。由于 Unity 的 WebGL 导出将游戏以网站的形式输出,因此一定有办法将 WebVR API 连接到我们的 Unity 游戏,以便将 WebVR 输入导入引擎。我们真的希望不必在一个月内尝试编写它。
幸运的是,一位名叫 gtk2k 的 GitHub 大神,大约一年前决定为每个人 搭建这座桥梁。他的方法很简单:他构建了一个 Unity WebGL 模板,其中包括 JS 文件,用于通过 API 处理 WebVR 输入,然后他通过 一个简单的脚本 将该代码导入 Unity。为了在 Unity 中正确实现该脚本,他创建了一个 相机 预制件,其中包含 3 个不同的相机 - 一个标准视图相机,它是一个普通的 Unity 相机;以及两个立体声相机,它们以略微调整的 x 位置和视口矩形并排显示。开发人员只需将场景中的主相机替换为此预制件,将 StereoCamera.cs
附加到它,然后观察神奇的效果。gtk2k 的桥梁非常巧妙地实现了当用户在自定义的 WebVR Unity 模板中点击“进入 VR”按钮时,从标准相机到立体声相机的切换。
下载一个 Unity WebVR 示例项目 或者获取 UnityPackage
将必要的文件导入你自己的项目。
要自己尝试该模板,你需要执行以下步骤
- 获取 Oculus Rift。确保你 启用了运行来自外部来源的应用程序。
- 下载并安装 Firefox Nightly。
- 安装 WebVR 启用程序。
- 获取整个 示例项目 或者只是上面的
UnityPackage
。 - 安装 Unity 5,并在提示选择导出工具时,确保同时启用了“WebGL 构建支持”和“Windows 构建支持”。
- 打开 Unity(示例项目或你自己的项目,其中添加了
UnityPackage
),并将你的MainCamera
替换为WebVRCameraSet
预制件。 - 确保
StereoCamera.cs
附加到预制件的父节点。 - 在 **文件 > 构建设置** 中,选择 **WebGL** 作为平台(但不要选中 **开发构建**)。
- 打开 **编辑 > 项目设置 > 播放器** 访问 **播放器** 设置;在 **分辨率和演示** 下,选择 **WebVR** 作为你的 **WebGL 模板**。
- 在相同的项目设置中,在 **发布设置** 部分,确保你的 **WebGL 内存** 大小设置为至少 512 MB,以避免内存不足错误。(对于 SECVRITY,我们将其设置为 768 MB。)
- 构建到 WebGL,并在 Firefox Nightly 中试用!
- 你可以测试本地构建,也可以将构建上传到你喜欢的网页托管服务。
希望这将帮助你开始构建你的第一个 Unity WebVR 构建!要在编辑器中进行测试,你需要启用桌面 VR 构建的标准功能。返回 **编辑 > 项目设置 > 播放器**,选择 **独立** 选项卡(由 **分辨率和演示** 部分上方的向下箭头图标表示),导航到 **其他设置**,并选中 **立体声渲染** 和 **支持虚拟现实** 的复选框。这些对于 WebVR 构建本身来说不是必需的,但你将在编辑器中进行测试时需要它们。
为了从设计角度补充该模板,我们添加了明确的说明,以便用户正确地进入其浏览器窗口的 VR 模式。我们还决定让用户可以选择是在 VR 中玩还是用鼠标玩。这就是事情变得棘手的地方。
我们希望桌面上的非 VR 用户能够玩 SECVRITY,因为,它在浏览器中!我们在支持 VR 之前就支持了鼠标控制,因此鼠标控制本身很简单。但是,当检测到 VR 输入时的鼠标控制会导致一些非常奇怪的结果。本质上,鼠标移动会影响 VR 头显的视口,导致用户:A. 彻底迷失,B. 感到非常恶心。我们必须检测用户是否处于 VR 状态,然后禁用鼠标控制来解决这个问题。
我们的解决方案是完全禁用鼠标控制,无论玩家是否使用 VR 输入,直到他们在主菜单中明确选择“鼠标”控制。现在,用户必须在玩游戏之前通过箭头键或控制器操纵杆选择他们选择的输入方法。(快速提醒:WebGL/WebVR 支持 游戏手柄 API,因此除了独立构建之外,集成控制器不需要任何额外的工作。)如果用户在佩戴 VR 头显时选择“鼠标”,那么就会出现令人作呕的问题。玩家须知:我们在一个月内构建了这款游戏!自动检测将在未来的版本中解决这个问题。
我们从通过 Unity 构建 WebVR 中获得了一些宝贵的经验教训,主要是在设计混合 VR/非 VR 体验方面。我们遇到的许多问题应该在引擎的官方 WebVR 导出中得到解决。但即使那样,了解用户可能采取什么行为来破坏你的游戏仍然很重要,尤其是在控制输入如此截然不同的时候。我们不得不对 gtk2k 的代码进行一些调整,以便进入 VR 流程能够与 Firefox Nightly 的最新更改相匹配,但他的代码库在很大程度上按照预期工作,我们几乎不需要做任何工作。他是我们的英雄。
网络是游戏行业的未来,Jump 凭借像 SECVRITY 这样的游戏来证明这一点。网页游戏为用户提供了在桌面、移动设备、游戏机、VR 头显和其他设备上几乎即时访问游戏的体验,无需任何永久下载或安装。网络已经可以提供接近原生的速度,并且随着 WebGL 2.0 和 WebAssembly 的即将到来,我们将开始看到接近当前世代的图形效果。Jump 希望帮助推动网络革命,让网络成为所有设备上游戏的终极之家。如果你想关注 Jump 的进展,你可以在 www.jump.game 上注册我们的新闻稿并获取测试版密钥。如果你想立即玩 SECVRITY,你可以在 mozvr.com 上找到它的演示版!相信我们:网络将彻底改变游戏行业。WebVR 将通过为开发者和用户提供直接从浏览器访问精美虚拟现实的即时体验,在展示网络的力量方面发挥重要作用。
关于 Anthony Palma
Anthony Palma 是 Jump 的首席执行官,Jump 是一家多平台数字游戏订阅服务,将于 2016 年推出。如果你想要测试版访问权限,或者你有一个想放在该服务上的游戏,请与我联系!
一条评论