WebXR 目前还是特别小众的项目,所以在 Oculus 上调试也是需要一些实践的,希望这篇文章可以提升这方面的效率
最近,我花了很多时间使用 Babylon.js 制作 VR 游戏原型。我喜欢 Babylon 和 WebXR API 等技术如何让我利用现代 Web 开发的快速迭代时间构建 VR 体验,而不是使用 Unity 等较慢的编译循环。
也就是说,直到最近,我的开发工作流程中有一部分让我很恼火!
我的大部分测试都是在 Oculus Quest 上进行,开发则在 Mac 上进行。WebVR 和 WebXR API 都要求您从通过 HTTPS(而不是非安全 HTTP)提供服务的网页访问它们,大多数浏览器都为localhost.
由于我使用的是 Mac,因此无法通过 Quest Link 将 Oculus Quest 设置为像连接到计算机的桌面耳机一样。也没有真正的方法来设置本地桌面计算机以通过 SSL / HTTPS 正确提供文件服务。
这就引出了一个难题:到底如何在 Oculus Quest 上本地测试你的游戏?
很多时候,这不是问题。我可以在我的开发机器上的 2D 浏览器中进行测试。如果我需要运动控制器,我可以将我的工作代码推送到远程服务器以从 Quest 加载,或者我可以使用Ngrok 之类的东西来获取重定向到我的本地计算机的 HTTPS URL。
但所有这些都感觉像是黑客,让我测试我正在做的事情变得更慢。当 WebXR 的最大吸引力之一就是迭代循环的速度时,这很糟糕!
事实证明,获得功能更强大的工作流程非常简单。localhost我将引导您将 Quest 设置为 Android 设备,然后配置 Android 端口转发,以便您可以从 Quest访问计算机上托管的 Web 服务器,使其正确进入 WebVR 或 WebXR 模式。
开发环境设置
尽管我们有兴趣使用 Oculus Quest 构建基于 Web 的内容,而不是使用 Unity 之类的内容进行本地构建,但您仍然需要对其进行设置,就像您正在做的那样。
按照 Oculus 支持网站上的说明 设置 Quest 进行开发。您需要创建一个开发组织来添加 Oculus 帐户,然后在 Quest 设置或手机上的 Oculus 应用中启用开发者模式。
安装 Android SDK 平台工具
此时,您的 Oculus Quest 即可进入开发模式,这意味着大多数 Android 软件开发工具都可以与其通信。
我们特别想使用adb(Android 调试桥)CLI 工具,它使我们能够以多种有用的方式与 Quest 进行交互。
adb您可以通过下载并安装 Android SDK Platform Tools来获得。如果您使用的是 Mac 并使用 Homebrew,您还可以通过运行 来安装它
brew cask install android-platform-tools。
无论哪种方式,希望在安装平台工具后,您应该能够adb在命令行中运行并查看一大堆文档。
将 Oculus Quest 连接到计算机
您可以使用任何 USB-C 电缆,包括 Quest 随附的充电电缆。
您需要打开 Quest 并接受提示以允许计算机与其连接。我强烈建议您选中将来跳过此提示的复选框。
完成后,adb devices从命令提示符运行。您应该将 Quest 视为唯一的设备。
如果该列表中显示多个 Android 设备(例如,您在打开开发人员模式的情况下插入了其他 Android 设备),请记下第一列中显示的设备 ID。adb reverse当您在下一步中运行该命令时,将-s DeviceId其作为标志添加到该命令中以指定您的目标是任务。
启用端口转发
从概念上讲,我们想要的很简单。每当您浏览到 Quest 上的给定本地端口(例如http://localhost:1234)时,我们都希望将其转发到您计算机上的端口。幸运的是,adb具有内置支持来执行此类端口转发!
我假设您的计算机上已经有一个本地 Web 服务器为您的 WebVR 或 WebXR 项目提供服务。请注意正在运行的端口。例如,我的项目设置倾向于在端口 3000 或http://localhost:3000.
在 中adb,我们所做的称为“反向端口转发”。常规端口转发意味着我们会将计算机上的端口转发到 Quest 上的端口。但我们正在尝试做相反的事情——从 Quest 本地主机上的一个端口路由回计算机上的端口——因此这被视为“反向”转发。
如果您知道需要转发哪个端口,则只需运行
adb reverse tcp:PORT tcp:PORT
即可adb处理其余的事情。例如,对于在端口 3000 上运行的服务器,
adb reverse tcp:3000 tcp:3000
正确连接事物,以便http://localhost:3000Oculus 浏览器(或 Firefox Reality)中的访问正确路由到在我的计算机上运行的 Web 服务器,并且应该允许进入 VR 模式。
您可以安全地关闭命令提示符并忘记adb其余的测试会话,尽管您需要在adb reverse下次断开连接并连接 Quest 时重新运行。
去做一些很酷的事情吧
理论上可以将其设置为无线工作,但实际上我无法让它工作。adb可以通过 WiFi 成功连接到我的 Quest,但adb reverse不起作用。adb reverseWiFi 连接历来都存在问题;看起来这些问题可能已经在最近版本的 Android 中得到解决,但 Facebook 的 Android 分支可能还没有引入这些修复。如果您设法使 WiFi 正常工作,请告诉我!
无论如何,您现在应该能够在设备上调试 Web VR 项目,而无需桌面 HMD 或将代码部署到服务器!我希望设置起来不会太痛苦,并且我希望这个小技巧可以帮助改善您的日常开发工作流程,就像它对我所做的那样。