几个概念
OpenXR
OpenXR是一套由Khronos Group发起,联合多家行业头部公司一起制定的开放标准,旨在解决XR平台碎片化的问题,同时简化AR/VR软件的开发。对于开发者来说,基于此标准进行XR应用程序的开发,能够使应用程序覆盖更广泛的硬件平台,同时无需移植或重新编写代码;而对于支持OpenXR的硬件平台厂商来说,能够在产品发布时即可拥有可运行在其上的大量内容。OpenXR Plugin
OpenXR Plugin是Unity开发的符合OpenXR标准的工具包,旨在让Unity开发者尽可能高效地将内容部署到更加广泛的XR目标平台上。开发者在Unity 2020中通过Package Manager搜索”openxr”即可找到该工具包并进行安装。SteamVR
SteamVR是Valve基于OpenVR推出的一套VR体验解决方案,以软件客户端形式存在,面向终端用户,故也常被称为SteamVR客户端。当运行或测试SteamVR平台支持的应用程序时,SteamVR客户端会自动开启,为应用程序提供运行时环境。SteamVR Plugin
SteamVR Plugin 是Valve公司提供给Unity开发者的开发工具,以.unitypackage文件的形式存在,在使用方面符合一般的Unity插件导入流程,开发者可使用该插件开发面向SteamVR平台的VR应用程序。
UnityXR技术栈
Unity为了更好地整合各种XR平台的Plugin和SDK,Unity 2019.3 和更高版本使用新的统一插件框架,该框架支持多个平台的直接集成。该技术栈中的一个 API 可以公开 Unity 支持的所有平台的通用功能,并使 XR 硬件和软件提供商能够开发自己的 Unity 插件。
该框架可以理解为:从unity开发的角度定义了XR的基本模块和向下接口及扩展,各家实现可以基于框架给定的plugin规范制作具体plugin的方式,进行模块实现,比如Oculus XR plugin。
在Unity里面通过ProjectSettings/XR Plug-in Management 里可以很方便地切换各个平台对应的Plugin。
UnityXR 各种开发工具
在最上层,unity和各个厂商推出了各种开发工具。
- XR Interaction Toolkit
Unity提供的原生通用性开发套件。
优点:由Unity提供,所以容易跨平台。开发Steam VR用app,基本都可以直接使用这个插件。
缺点:也是由于为了通用性,无法活用各个平台的特性,Quest2上会有一定的性能瓶颈。 - Oculus Integration
Meta提供的Quest用SDK。
优点:提供支持Quest特有的功能:- 手部追踪
- 透视(MR app)
- 性能上好像比unity提供的好。
- Mixed Reality Toolkit
微软的Hololens的配套SDK。 - WebXR Export
用来开发在网页浏览器上的vr应用。 - VRChat SDK
制作VRChat里环境和游戏的用SDK。注意没有和VRChat签约的话,是非商用的。 - VRTK
VRTK是各种SDK之上的又一层VR开发框架。对常用的VR交互功能做了有效封装。
官网:https://www.vrtk.io/
优点是封装的功能比较多,文档详细。
配置开发环境 (以用 Oculus Integration 为例)
打开任意大于2019.3的版本的unity后,在ProjectSetting里点击XR Plug-in Management选项根据提示安装package。由于是开发Oculus应用,在选项卡里,各个平台均选择Oculus。(如果想用OpenXRSDK开发直接选OpenXR。但这时候如果直接启动连Quest2的话会启动StreamVR,比较烦。在OpenXR选项卡里,将PlaymodeOpenXR runtime改成 Oculus OpenXR就好了。)
之后打开PackageManager安装 Oculus Integration。(没有的话需要进Unity assetstore添加一下。)一路确认下去,可能需要Unity重启。完成之后会在ProjectSetting里多一个Oculus选项卡,里面显示了一些需要处理的报错,基本只要点fix all就可解决。\之后往场景里拖一个OVRCameraRig的Prefab即可实现头显的追踪。
想playmode直接测的话,Quest要先通过QuestLink连电脑。连接完成后直接点play就行。
之后如果想打包测,将Build平台改为安卓,连上Quest(要搞好开发者模式)直接buildAndRun可以,也可以build后通过SideQuest装,也可以通过adb装。(惊讶地发现Oculus Integration在fix时把什么il2cpp、arm64和安卓版本都设置好了)\
一些开发工具的Template
XR Interaction Toolkit
https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples
unity官方提供的一个template,git工程拉下来就能用。Oculus Integration
从 assetstore 拉下来对应的包后,在Assets/Oculus/SampleFramework/Usage 文件夹下。想试什么功能,直接打开scene测就行。VRTK
https://github.com/ExtendRealityLtd/VRTK
VRTK官方提供的Template。场景在Assets/Samples/Farm/Scenes下。
总结
这里只是简要介绍了Unity里开发VR的环境。本质上VR游戏和一般的游戏开发没太大区别。问题还是在交互和玩法上。大家跟据需要和要上线的平台,选取适合的开发环境就行。
这里顺便推荐一个日文的博客
上面对VR开发讲的比较详细,这篇博文大部分也是这个博客的翻译,有兴趣地小伙伴可以看看。