最近在把项目从Unity2018升级到Unity2021,程序问题都好处理,但是唯独在VR上困惑了很久。
本身VR相关的概念就比较多,同时Unity还自己弄了一套XR的插件,做了也就做了,结果还没做全。然后Steam和Oculus在AssetStore上还有专门支持的插件。这么几个问题绕在一起,就直接乱成一团了。
查了一些资料,花了几天的时间,终于稍微清晰一些了,记录在下面
使用Unity开发VR就绕不过这么几个概念
广泛的概念
OpenVR:Steam提出来的概念,即将被OpenXR取代,不过Unity上还是要使用OpenVR来支持HTC等设备的开发
OpenXR:广大VR厂商提出来的一个新的接口概念,代表着未来
SteamVR:Steam提供的一个支持VR的App
OculusApp:Oculus推出的VR应用的App,只想串流的话,用这个软件
OculusDeveloHub:开发Oculus应用的一个工具集
Unity独有的概念
XR Plugin Management:Unity自己开发的VR开发框架
XR Interaction Toolkit:一个基于组件的高级交互系统
OpenXR Plugin:基于Unity的XRPlugin体系对OpenXR的支持插件
厂商推出的插件
SteamVR Plugin:Value推出的Untiy插件,使用Unity开发HTC 设备需要引入的SDK框架
VIVE Input Utility:HTC自己开发的一个工具,底层还是基于SteamVR来的
Oculus Integration:Oculus开发的一个方便开发VR应用的工具插件

开发PC程序如何选择

Unity使用OpenVR模式支持HTC Vive

开发的程序需要跑在PC上同时要支持HTC vive,Oculus,Value Index等设备,只需要在Unity的PackageManager中添加XR Plugin Management,同时导入SteamVR Plugin即可。

PackageManager界面如下截图

unity 接入ArcFace离线本地人脸识别 unity openvr_App


OpenVR XR Plugin是SteamVRPlugin引入的包

看过一篇帖子SteamVR在Unity上并没有完整支持OpenXR,所以只能继续使用OpenVR的方式来支持VR开发

Project Settings中的XR Plugin-in Management中选中

unity 接入ArcFace离线本地人脸识别 unity openvr_unity_02


这样的话,Oculus也可以通过SteamVR的方式来使用,而不需要引入Unity原生的Oculus来增加项目的复杂度了。

SteamVR Plugin这个插件是个工具集合,如果只想让Unity能成功对接,只需要引入com.valvesoftware.unity.openvr-1.1.4.tgz这个package包就可以了

使用Unity的OpenXR插件支持HtcVive

Unity最新的XRPluginManagement配合OpenXR Plugin插件已经可以正常驱动Oculus 和 HtcVive了,结合XR Interaction Tookit就可以用更符合Unity标准的方式来驱动VR设备

PackageManager界面如下截图

unity 接入ArcFace离线本地人脸识别 unity openvr_unity_03


虽然通过OpenXRPlugin插件,貌似依然需要SteamVR这个程序

当前版本(1.3.1)的OpenXRPlugin可以很好的对接Oculus Quest2/Htc vive pro,但还不支持HTC的Tracker,不支持的原因有后面几个

1.首先是OpenXR这个标准对HtcTracker的支持是在2021年9月份才定稿,

2.SDK库是2021-10-04才发布,

3.SteamVR则是需要1.21.1(2021-11-10)版本才支持了对HtcTracker的支持

想要Unity支持应该就更晚一些了,毕竟OpenXR(v1.3.1)插件中附带的库才是1.0.17

设置界面截图如下

unity 接入ArcFace离线本地人脸识别 unity openvr_XR_04


通过OpenXR的方式已经跑通的Oculus Quest和HtcVive Pro两个硬件

想要测试的VR的话,建议大家用官方的一个VR例子

OpenXR运行时

如果电脑上既装了SteamVR又装了OculusHub,那么会引入一个OpenXR运行时的概念

SteamVR中OpenXR运行时设置画面

unity 接入ArcFace离线本地人脸识别 unity openvr_XR_05


unity 接入ArcFace离线本地人脸识别 unity openvr_vr_06

Oculus App中设置OpenXR运行时的界面

unity 接入ArcFace离线本地人脸识别 unity openvr_XR_07


unity 接入ArcFace离线本地人脸识别 unity openvr_Management_08

遇到的问题

  • 通过有线串流 Oculus Quest2,连接测试错误 报错 197063 两根线怎么也无法通过,在公司的电脑上没问题,在家里就一直报这个错。没啥好办法,只能换电脑。