社区链接:
Spatial XR 高级社区(知识星球)
Spatial XR 高级社区(爱发电)
配套的视频链接:MetaXR SDK无法导入的解决方法
以后 Meta 提供的 Unity 开发 SDK 会更新到 Meta XR SDK 中,原来的 Oculus Integration 不再更新。但是在发布这篇博客的这段时间内,如果从 Unity 的资源商店导入 Meta XR SDK,会报错
[Package Manager Window] Error adding package: com.meta.xr.sdk.all@60.0.0.
undefined == true
UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()
如果你和我遇到了一样的问题,不要担心,本文提供了另一种导入方式:从 Meta 官网导入。
下载链接:https://npm.developer.oculus.com/ (需要连外网)
官方对每个开发包的介绍以及版本更新说明:https://developer.oculus.com/downloads/unity/
我也会把下载的开发包分享到 Spatial XR 社区里,社区成员可以直接从社区里下载。
现在 Meta 提供的 Unity 开发 SDK 已经从原来的 Oculus Integration 改成了 Meta XR SDK。在发布这篇博客的时候,Meta XR SDK 已经更新到了 v60 版本。我之前出的 Quest 一体机开发教程使用的是 Oculus Integration v57 版本,当时我们是从 Unity Asset Store 资源商店里导入的,我们可以打开资源商店看一下。
这个 Oculus Integration 目前是处于弃用的状态,这个弃用指的是这个包只更新到 v57 版本,然后v57 之后的版本会更新到Meta XR SDK中。不过目前来说,之前的系列教程中介绍的相关物体和脚本配置是没有发生变化的,比如说实现抓取功能,那么在玩家物体和可抓取物体身上需要添加哪些东西还是一样的,这些部分大家还是可以参考之前的教程,之后的教程我就会使用 Meta XR SDK 来进行讲解。那么从 Oculus Integration 转变成Meta XR SDK,只是包的导入方式和一些资源脚本的存放位置发生了一些变化。如果一些物体和脚本的使用方式发生了明显的变化,我之后会出新的教程进行说明。如果使用方式是一样的,那么大家依然可以跟着这个系列教程进行学习。
因为原本的 Oculus Integration 集成了 Meta 所有的 SDK,所以它叫 Integration。那么这种方式其实也有缺点,因为之后 Meta 为开发者推出的开发功能会越来越多,如果所有的功能都集成到一个整合包里,会导致这个开发包越来越大。所以 Meta 把不同功能的开发包拆分成一个个单独的包,这样开发者只需要导入开发所需要的包,没有用到的包就不需要导入了,这样能够减少包体大小,然后让不同的包分工明确。大家可以看到 Unity 的资源商店里的这些开发包,它们就是从 Oculus Integration 中拆分出来的包,比如 Meta XR Interaction SDK,我们最近学的 Quest 手势追踪交互相关的资源和脚本大部分就来自于这个包。如果你想要将所有的功能一起导入,你也可以选择这个Meta XR All-in-One SDK,它和 Oculus Integration 是类似的,也是一个整合包(链接:https://assetstore.unity.com/packages/tools/integration/meta-xr-all-in-one-sdk-269657#reviews)。实际上我们说的 Meta XR SDK 就是 Meta 各个功能的 SDK 的统称。
但是自从 Meta XR SDK v59 版本发布至写这篇文章的时候,Unity 资源商店中的 Meta XR SDK,不管是这个 All-in-One SDK,还是其他单独的开发包,都无法从 Unity 的 Package Manager 中导入到项目中。报错信息如下:
目前尚不清楚是不是 Unity 国服版的原因,如果你遇到了同样的问题,不要担心,这篇文章会介绍另一种导入方式:从 Meta 的官网导入。
下载链接:https://npm.developer.oculus.com/ (需要连外网)
官方对每个开发包的介绍以及版本更新说明:https://developer.oculus.com/downloads/unity/
可以直接点击每个包最右侧的下载按钮进行下载。
下载之后,在导入之前需要特别注意“依赖包”这个概念。如果一个包有依赖包,那么必须要先导入所有的依赖包,然后才能导入这个包。
比如我们点开其中一个包,点击 Dependencies:
比如这个 .interaction.ovr.samples 包在导入之前需要先导入 .interaction.ovr 包和 .sharedassets 包。一般来说,我们只需要关注 com.meta.xr 前缀的依赖包,它们能从 Meta 官网上下载。如果是前缀 com.unity 的包,基本上是 Unity 自带的。
不过即使你忘了导入依赖包,在导入 Unity 的时候 Unity 也会给你提供报错信息:
常用包的依赖包:
包名 | 依赖包 |
---|---|
com.meta.xr.sdk.core | 无 |
com.meta.xr.sdk.interaction (Interaction SDK) | com.unity.textmeshpro@3.0.6,com.unity.ugui@1.0.0 (Unity的包是Unity自带的) |
com.meta.xr.sdk.interaction.ovr | com.meta.xr.sdk.interaction,com.meta.xr.sdk.core |
com.meta.xr.sdk.sharedassets | com.unity.textmeshpro@3.0.6,com.unity.ugui@1.0.0 |
com.meta.xr.sdk.interaction.ovr.samples | com.meta.xr.sdk.interaction.ovr,com.meta.xr.sdk.sharedassets |
com.meta.xr.mrutilitykit | com.unity.textmeshpro@3.0.6,com.unity.ai.navigation@1.1.4,com.unity.nuget.newtonsoft-json@3.0.2,com.meta.xr.sdk.core,com.meta.xr.sdk.interaction,com.meta.xr.sdk.interaction.ovr |
打开 Unity 菜单栏的 Windows > Package Manager,点击左上角的 “+” 号,选择 Add Package from tarball,然后就可以导入从 Meta 官网上下载的 .tgz 后缀的包。
与 Oculus Integration 相比,Meta XR SDK 最主要的区别就是:原来的 Oculus Integration 是将所有资源存放在 Assets/Oculus 文件夹下;Meta XR SDK 将包的大部分资源,例如 Prefab,脚本等存放在了 Packages 文件夹下。而 Assets/Oculus 文件夹下只留了一个全局的配置文件。
因此,我们在 Project 窗口中搜索 Meta XR SDK 的资源时,需要选择 “In Packages” 或者 “All”,默认是只在 Assets 文件夹下搜索。
当你导入了 com.meta.xr.sdk.interaction.ovr.samples 这个包时,你会发现 Packages 文件夹的这个包里找不到场景文件。这个时候需要打开 Package Manager,找到对应的包,点击 Samples 手动导入:
导入后的场景文件位于 Assets/Samples/Meta XR Interaction SDK OVR Samples 的子文件夹下。
其他的带有 Samples 的包也是类似的导入方式。
此外,Meta 也为开发者提供了一个 StarterSamples 样例工程:https://github.com/oculus-samples/Unity-StarterSamples,其中也包含了一些可供学习的场景。