返回 登录
8

探索使用 Unity 开发 Gear VR App 遇到的坑

阅读11208

原文: What you need to know when building a Gear VR app in Unity
作者: Patrick Catanzariti
CSDN 有奖征稿啦】技术之路,共同进步,有优质移动开发、VR/AR/MR、物联网原创文章欢迎发送邮件至 mobilehub@csdn.net

在使用 Unity 针对不同的平台开发虚拟现实应用程序时,我们会遇到一些问题。在此作者花费了一些时间将一款 Unity Google Cardboard App 移植到 Gear VR 上,并将其中遇到的坑及解决方案分享给大家,以帮助想要尝试的开发者少走一些弯路。

“项目设置”和“玩家设置”

想要在 Gear VR 上正常地运行一款 App,前提要在 Unity 项目中有正确的“项目设置”以及“玩家设置”。这其实并不复杂,但是万一出错,那么还是得重新检查设置是否正确,那将会耗费大量的时间。下面笔者将介绍如何搭建 Gear VR 项目:

  1. 打开文件>项目设置…
  2. 选择“Android”作为你的平台(选择它然后点击“Switch Platform”)
  3. “纹理压缩”选择“ASTC”技术(Oculus 开发者中心文档推荐该技术
  4. 然后点击“玩家设置”会在右边弹出其他设置窗口
  5. 在这些设置中,点击 Android 标签(如果之前你已经选择“Android”作为项目平台的话,这个选项应该已经被选择状态,但还是应该检查一遍)
  6. 最重要的一步是——勾选“Virtual Reality Supported”。如果你已经搭建过其他平台的项目,这一选择尤为重要,因为容易忽略。我在 Google Cardboard 老的 SDK 和 Gear VR 开发之间切换时,有很多次都忘记了这个复选框。如果忘记选择且项目导出之后,那就很麻烦了。
  7. 在“Virtual Reality SDKs”选项下面,点击“+”按钮并增加“Oculus”。以上的设置同样适用于开发 Oculus Rift 项目时
    ,这一步的目的是可以共享之前的设置。

正确的设置如图所示:

需要 Oculus 签名文件

在运行 App 时,看到 Gear VR 报“thread priority security exception make sure the apk is signed”这样的错误时,这意味着你的手机无法看到你的 Unity 项目的 Oculus 签名文件。

这并不是很难生成,但如果你经常使用 Google Cardboard App 或在项目开发中期更换手机时,这一点也容易被忽视掉!App 之所以需要一个 Oculus 签名文件,是因为其可以授予运行 VR 相关事宜的手机权限。

“所有 Gear VR 应用程序必须在开发期间使用 Oculus 签名文件(osig)进行签名,以便在移动设备上访问低级别 VR 功能。这个签名是以一种 Oculus 发出文件的形式。“——Oculus 官方文档

另外还可以使用 Oculus 签名文件(osig)生成器生成 OSIG 文件。它们提供了如何为你特定手机生成文件的完整详细信息,其过程只需确保使用 USB 连接电脑。

一旦从该生成器上下载文件后,将其添加到项目的Project /Assets/Plugins/Android/assets/文件夹中。

无须将手机放置在 Gear VR 头显中进行测试

原来可以在手机上的 Gear VR 服务中启用开发者模式,这样无须连接到头显设备就可以运行 Gear VR App。

为此:

  1. 将带有 OSIG 文件的应用程序安装到手机上;
  2. 然后打开手机的 Settings > Application Manager;
  3. 找到并打开“Gear VR Service”;
  4. 在较新版本的 Android(Android 7.0 Nougat 及更高版本)系统上,点击“Storage”;
  5. 点击“Manage Storage”;
  6. 一直点击“VR Service Version”,直到出现“Developer Mode”的隐藏选项;
  7. 打开“Developer Mode”选项;
  8. 然后点击“Add icon to app list”,这样就可以在应用程序列表中找到“Gear VR 服务”轻松地打开和关闭开发者模式。

未连接到 PC 时,如何查看 Gear VR App 日志?

这是一个有趣的问题——当你配戴 Gear VR 头显时,无法查看日志。手机无法同时连接到 Gear VR 头显与 PC 。因此,该如何查看日志呢?这个很简单,你可以使用无线网连接手机日志。

1.使用相同 Wi-Fi 连接手机与电脑;
2.通过 USB 接口将手机连接到电脑;
3.手机 TCP/IP 连接端口 5555。打开电脑的 command (Mac 上 Terminal),然后键入以下内容:

adb tcpip 5555

4.输入之后应该显示成功,例如我的电脑显示:

* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in TCP mode port: 5555

5.此时可以移除你的手机;
6.连接到手机,需要其 IP 地址。你可以在 Settings > About tablet (or About phone) > Status > IP address 找到。
7.知道 IP 地址后,你可以使用终端命令连接到它:

adb connect (that IP address you just found out)

例如,如果 IP 地址为 192.168.13.37:

adb connect 192.168.13.37

8.如下所示,则连接成功:

connected to 192.168.13.37:5555

9.运行后,您可以使用以下命令检查手机是否已连接:

adb devices

如下所示,则连接成功:

List of devices attached
192.168.13.37:5555        device

10.然后查看该手机的日志:

adb logcat

11.以上命令会显示你的手机上的每一个日志!这样会有太多的日志了,那么可以过滤一下:

adb logcat -s Unity

如果以上步骤没有显示你想要的日志,根据 Unity 论坛上的答案也许能帮到你捕获更广泛的日志信息:

adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG

12.最后命令行还是乱起八糟的?我知道这种感受。事实证明 Android Studio 可以有一个更清晰的视图来显示手机日志另外还可以实时过滤日志!为此,我只是在 Android Studio 中创建一个空白项目,然后使用在界面底部的“Android 监视器”。其中有一个过滤器框,你可以键入像“Unity”,就能够立即日志过滤:

无须改变 Android Manifest 文件

在调试和修复一些 bug 时,我去编辑了 manifest 文件…但这并非是正确的做法。其实 Unity 会自动更新:

“在构建过程中,VR 支持的 Unity 项目能使用自动生成的 manifest 进行打包,并可以满足我们的需求来配置(通过landscape orientation、 vr_only 等等)。” —— Unity官方文档

在 Unity 播放器内不容易测试,获取 DK2?

在 Unity 编辑器中其实不能直接点击 Play 按钮,然后测试你的 App。相反,你必须每次都上传到手机上,这可能让你很烦。这里有一个解决方法,但是不一定适用每个人,即使用一个 Oculus DK2。

如果你有一个备用的 Oculus DK2,你可以把它连接到你的计算机然后进行快速测试,而不需要导出整个项目。只需插入 DK2,然后按一些 play 按钮即可!

请记住,在 Gear VR 上所呈现的未必就是很真实的,还是需要根据你自己想要的测试:

“Android 应用程序的渲染路径与用于 Rift 应用程序预览和构建的渲染路径大不相同,最大的不同在于外观和感觉以及性能上。” — Oculus 官方文档

注意 Unity 5.5.2 版本

目前 Unity(在撰写本文时) 最新稳定版本为 Unity 5.5.2,然而在 VR 模式下使用该版本运行成功,但导出 Gear VR 项目出现了一些问题。如果你发现在 VR 中 App 有问题且之前所有的设置正确的,那么尝试使用 Unity 5.5.1 版本,看看是否可以正常运行。

评论