陆陆续续摸索了几天,游走于CSDN和Github之间查找解决方案,主要参考的是微软官方的解决文档及开源项目,接下来主要就是记录一些在过程中随机遇到的问题和最终采取的解决方法的一些流水帐,也是方便日后自己做一些回顾和提前的整理。
第一站
我这边的配置是:
- Unity2021.3.13f1c1版本
- Window11 SDk(10.0.22000.0)和Windows10 SDK(10.0.19041.0)
- Hololens2
- VisualStudio2019
微软官方使用的是Unity2020版本,主要是涉及到了一个Unity版本兼容性的问题。
首先,从微软官方下载此项目,可以去参考文档1里的github进行下载,这里也放一个百度网盘的下载链接:2222
解压里面的MixedReality-QRCode-Sample,简单介绍一下文件的主要组成:
文件/文件夹 | 描述 |
---|---|
Samples/Assets | 主要包含的Unity的资产、场景、预制件和脚本 |
Samples/Packages | 项目清单和一些资源包 |
Samples/ProjectSettings | Unity资源的设置文件 |
Samples/UserSettings | 从Unity生成的用户设置 |
.gitignore | 定义提交时要忽略的内容 |
README.md | 必读文件 |
LICENSE | 不要侵犯别人的版权,虽然但是一般我不咋看 |
切入正题,直接点击Sample->Assets->QRCodesSample.unity,这就是一般的打开Unity场景的方法,这里我是用Unity Hub来管理Unity的,我觉得比较方便,但是上文已经说到,这个项目其实是导入的Unity2020版本的生成文档,因此必然会和我的有冲突,接下来,用图来辅助描述:
如图所示,就出现已保存的项目(2020.3.38f1)的版本与当前运行的编辑器(2021.3.13f1c1)不符的问题,我们选择继续。
我们选择Enter Safe Mode。
结果显示出现了bug,我们仔细看看,其实是关于一些命名空间的问题,我查来查去,发现是构想项目的过程中缺少包的问题,这里我们还是用VS2019打开查看一下。
最后其实我的解决方案是安装了最新的.Nupkg包,当时我第一次接触到这个类型的包,也不知道是啥,也是搜了一段时间,我的理解就是一种特殊的压缩包,有专门的管理包库NuGet,其实这种包有一种很简单查看内容的方法,就是把后缀名改成.rar文件,然后对整个文件进行解压缩,就可以对这个文件中的内容进行查看。这里我们仔细看一下上图中的Microsoft.MixedReality.QR的版本是0.5.3019,但我觉得就是这里出了问题,因此去NuGet库中下载了最新的包,下载地址为https://www.nuget.org/packages/Microsoft.MixedReality.QR#readme-body-tab
我们下载文件到项目所在的路径,在Unity中导入资源包。(如果你的Unity中配置了NuGet管理的话,我们可以采取方法二,可以直接在Unity中点击NuGet->Management NuGet Package->online search Microsoft.MixedReality.QR进行搜索,点击安装即可)如图,我们安装了0.5.3037的包,这个时候我们再看一下Unity界面。发现已经不报错误了,而且Assets->Packages中也多了Microsoft.MixedReality.QR.0.5.3037,说明我们已经成功地解决了bug。(注意:这里特别注意,因为每个人的Unity在安装的时候选择的组件都不一样,所以建议大家仔细看看安装时的一些选项,针对Unity,其Unity Hub我觉得挺好用的,相当于是一个很好的前端交互界面,可以比较好地管理版本和创建项目,但是不要乱安装一些版本,因为其实Unity的每一个版本都挺大的,慎重,所以我当时在刚遇到这种错误的时候也尝试了安装与项目的构建时相同版本2020.3.38f1,但是当时这个版本下载不成功,可能也是就现在而言2020.3.38f1版本不稳定了,因此也就直接用目前的2021版本来进行项目构建)
打开这个场景,Play一下,不知道在干啥???因此,先写到这里吧。
第二站
第三站
第三站是全息远程处理示例,演示如何编写应用程序以将内容流式传输到运行具有混合现实或者OpenXR运行的Windows混合现实的Microsoft Hololens2或者电脑的示例。我们的项目链接是中的MixedReality-HolographicRemoting_Samples。
该示例是为了显示如何使用混合现实或者OpenXR运行时将内容流是传输到Microsoft Hololens2或运行Windows 混合现实的PC的示例。本着课题导向的原则,打算简单浏览一下实现功能即可,但是在我的课题中,主要是为了实现电脑的Unity画面实时显示在Hololens2设备之中,主要是通过全息远程处理API来实现,所以最后还是决定仔细阅读代码实现。
内容剖析
首先,阅读一下README.md,梳理一下整个项目的文档。
文件/文件夹 | 描述 |
---|---|
player | 全息远程处理播放器示例代码 |
remote | 全息远程处理示例代码 |
remote_openxr | 使用OpenXR的全息远程处理示例代码 |
.clang-format | 源代码样式格式 |
.editorconfig | 标准editor配置的设置 |
.gitignore | 定义在提交时要忽略的数据 |
CODE_OF_CONDUCT.md | 有关Microsoft开源行为准则的详细信息 |
LICENSE | 示例的许可证 |
README.md | 懂的都懂 |
接下来的主要操作参考主要的几个微软官方的教程链接来实现全息远程处理。
主线路是创建全息远程处理应用以在Hololens2上直观呈现3D内容
我们的配置还是上述的第一站中的配置。
首先,我们前置知识了解了之后,直接来到第三单元的创建和准备Unity项目。我们先转到初始化项目并且部署第一个应用程序一文中并按照其中的说明操作创建和准备Unity项目。
先按照操作一步步执行初始化项目并且部署第一个应用程序。这里导入的混合现实功能工具的最新版本(目前是2.8.2)以及相关的资源我打包好了在百度网盘的链接中,其中的MRTK即问下载的资源。
这里,特别注意这里需要选择的文件夹下必须包含Assets,Packages和ProjectSettings子目录,所以建议大家保存在我们自己刚才建立的该项Unity项目下,然后其他的都选择默认即可,生成的会默认生成一个’_’来代表值。
按照操作导入之后,会显示需要restart(重启)一下,点击yes
出现如下的界面,表示成功。
出现类似下列的警告,选择Fix All即可。
选择如下:(有警告就Fix)
命名一下:
注意:不需要继续执行交互模型之后的部分
打开MRTK导入TextMeshPro Essential资源,(一直Next直到出现Import TextMeshPro Essential),导入即可。
出现如下界面,表示导入成功
接下来,不用继续进行了。我们转入下一个链接空间感知入门
如下图的操作所示,进入MRTk配置文件,如果出现了黄色感叹号警告,则选择clone,一直到没有感叹号为止,文件的命名和存储路径都默认即可,然后选择spatial Awareness,把黄色的感叹号处理一下,一直默认clone,直到所有的黄色感叹号都消失。
将滑到最下方,将XR SDk Windows Mixed Reality Spatial Mesh Observer -> Display Setting -> Display Option改为遮挡。
做到这里,我们就把图19中展示的所有前置条件都配置好了。
接下来,我们导入环境资源,环境资源也在我们刚才下载的MRTK文件中,如下图所示:
选择 资源 -> 导入包 -> 自定义包
选择图20中的包进行导入。
接着按照配置和准备教程进行操作。
我选择的是生成到UMP平台,生成完之后,我们需要在Hololens2来安装远程播放器(Holographic remoting),要实现远程操作,需要让电脑和Hololens2连接到同一个IP上,这里建议可以买一个路由器,我用的手机wifi,不是很稳定,我们连接上之后,在Unity任务栏中选择
**Windows -> XR -> Holographic Remoting for Play Mode **,输入IP,修改界面如下:
点击Play,即产生了如下的画面
{按时打算发的}
杂记
Holographic Emulation Mode 和 Holographic Remoting for Play Mode的区别:
1、前者是仿真模式,后者是远程模式。
2、全息远程处理(Holographic Remoting)允许你在连接到 Windows 全息设备 (Microsoft HoloLens) 后直接从编辑器运行应用程序。应用程序的行为就像部署到设备一样(具有完整的传感器数据和定位),但实际上将在主机上运行。游戏视图窗口还允许您查看设备上正在渲染的内容(当然,设备佩戴者从现实世界中看到的任何内容都没有);全息模拟(Holographic Emulation)更进一步,允许你直接在编辑器中在模拟设备上运行, 换句话说,不需要物理设备。当你在团队之间共享的设备数量有限,或者你想要在获取物理硬件之前尽早开始全息开发时,这是一个很好的开发选择。我们是有AR设备的,因此采用全息远程模式。
Open XR
1、顾名思义,“Open XR”指的就是开放的某某(X)R(一般指的就是AR、VR、MR),简单讲就是开源的、免费的可以对各种现实(Reality)平台和设备访问的集成化设计平台。
2、Unity的XR Setting在某一年之后取消了Project Setting -> Player -> XR Setting, 可能是放在XR Package中统一管理了。
参考文档
、微软官方的QR码追踪项目https://github.com/microsoft/MixedReality-QRCode-Sample
、微软官方教程 https://github.com/microsoft/MixedReality-HolographicRemoting-Samples
、OpenXR | OpenXR是什么?一文带你全面了解OpenXR的相关知识,上车收藏不迷路https://cloud.tencent.com/developer/article/1955500