骑着Unity路过的风景-MR开发

你降落的,太突然了,我刚好呢,又路过了

Posted by Elias on March 5, 2022

骑着Unity路过的风景-MR开发

前言

若不是你突然闯进我生活,我怎会把死守的Unity放任了

耳机刚好听到这首歌,那就拿来作为引言好了!

年前机缘巧合下接到了MR开发的项目,

(虽然大伙儿都觉得这个是AR,但是干下来发现这明明是MR)

年后这几天差不多结束了MR的开发,谨以此文记录这几个月趟过的坑。

本文仍以结果为导向,叙述从零到壹的MR开发历程。

一、万物之初

“我们除了PC的3D展示,还需要有一个AR展示版本,让客户更加直观、深刻地理解我们的产品”,AR项目应运而生。

但是这个项目真的是MR啊喂!

0.扫盲

AR(增强现实):在物理世界中叠加图形、视频流或全息影像。(用户会认为自己仍然处于物理现实,因为此时仅仅是在原有物体上叠加了图形)

VR(虚拟现实):遮挡视线以呈现全沉浸式数字体验。(用户将完全体验数字现实,并不会意识到周围的物理现实,欸嘿,因为眼睛被挡住了,看不到外界)

MR(混合现实):在AR与VR之间,它可以在物理世界中放置一个数字对象,就如同它真实存在一样;它可以在物理世界中以个人的数字形式(虚拟形象)出现,以在不同的时间点与他人异步协作。(融合了真实世界和数字世界,数字世界的内容可以与真实世界的物体进行互动,简单来说,就类似于钢铁侠中的全息投影技术)

1.前期准备

调研了各大厂商的AR头戴式设备,寻找了几家AR设备厂商,经过现场沟通交流、实机演示之后,最终选择了微软的Hololens2头戴式设备。经过讨论之后,AR产品有了雏形:使用Unity开发3D展示软件,并且分别发布到Hololens2和iPad上,实现Hololens2与iPad的双机协同。在演示时主要由Hololens2佩戴成员进行场景控制,由iPad操作人员投屏,并以第三人称视角多角度观看产品动画,讲解产品功能。

人员配置:

3D建模人员,Unity3D开发人员。

资源配置:

Hololens2头戴式眼镜,iPad Pro,Mac笔记本(用于ios发布),若干台式机,若干屏幕(多屏办公真的疯狂提升开发效率好吗!)

2.软件开发

本小节不会详细讲述场景相关开发,因为那和Unity本身的开发极为相似。

本小节将主要讲述与MR开发相关的内容,比如人机交互的开发、连接多个用户、与多个用户共享对象运动等内容,这些内容都可以在微软官网查看更为详细的开发流程。

2.1 开发前置条件

以下是我的低配硬件条件,比这个高应该都没问题

系统:Windows 10

CPU:i5

显卡:GTX 1050ti

Unity版本:2020.3.27f1c1 (低于这个版本无法使用OpenXR框架)

VS版本:VS2019,需装有“通用Windows平台开发”

2.2 MRTK工具包下载

微软为Hololens的开发推出了MRTK工具包,该工具包为Hololens开发者提供了极大的便利,就好比一开始开发者需要自己造建筑材料,而微软直接丢给开发者一堆乐高,让开发者自己拼,极大的降低了AR开发门槛。当然,一些定制化的功能开发还是需要自己做的。

MRTKDownload

MRTK工具包下载地址

下载完成后,解压,得到如下文件:

MRTKDownload

2.3 MRTK的配置

2.3.1 新建一个项目

在为我们的MR项目配置MRTK之前,我们得先建立一个Unity的项目(我仿佛说了什么废话)

建立Unity的项目此处就不过多赘述,就正常建立一个3D项目就可以。

当我们建立好Unity项目后,先切换到UWP平台:

UWPChange

如果此处没有UWP平台,就点击“Install with Unity Hub”下载平台,下载完成后切换到UWP平台,待切换完成后,继续后续操作。(UWP的相关设置在后续Hololens2部署一节中会讲到,此处就把UWP平台下载并切换即可)

2.3.2 将MRTK配置到项目中

双击之前下载好的MRTK工具包中的“MixedRealityFeatureTool.exe”可执行文件。

MRTKSet1

点击左下角设置按钮,

MRTKSet1

选择“Feature”标签页,将“Show preview releases”勾选上后,点击“OK”。

MRTKSet2

接着回到刚才的主页面,点击“Start”进行下一步。

MRTKSet3

点击下图箭头所指的图标,接着选择需要添加MRTK工具包的项目文件(.sln)所在路径,选择完成后,点击“Discover Features”进入下一步。

MRTKSet4

分别点开下图所示内容,

MRTKSet5

选定如下所示内容,

MRTKSet6

MRTKSet7

选择完成后,点击“Get Features”,对所选功能进行获取,待获取完成后,点击“Validate”对获取的文件进行一次验证。

MRTKSet8

合法性验证通过后,点击“Import”,再点“Approve”,最后点击“Exit”,回到Unity,等待文件载入后,即可完成MRTK工具包的初步配置。

MRTKSet9

MRTKSet10

2.3.3在项目中进一步配置MRTK

初步配置完成后,Unity顶部菜单栏会多一项“Mixed Reality”,

选择“Mixed Reality”>“ToolKit”>“Utilities”>“Configure Project for MRTK”

MRTKSet11

点击后会出现下图的配置界面,此时并不能完整看到界面内容,需要拖动右侧(或者右下,怎么方便怎么来),使整个窗体显示出来。(真离谱嗷)

MRTKSet12

下图为窗口拖动后的全貌,选择“Unity OpenXR plugin(recommended)”,

(注意:Unity 2020.3.27以下的版本可能不支持该框架,此处选用该框架是为了后续更加方便的进行空间位置的配置)

MRTKSet13

选择完成后,出现如下内容,继续选择下图红框内容

MRTKSet14

如下图所示勾选对应的内容,开放相关功能,

MRTKSet15

接着对OpenXR相关内容进行配置,配置完成后关闭当前配置窗口,在“MRTK Project Configurator”窗口中点击“Next”

MRTKSet16

接着将所有的可勾选框勾选上,再点击“Apply”,Unity会自动重启,重启完成后,就完成了MRTK工具包的所有配置。

MRTKSet17

在下一小节我们将开始建立一个简单的Demo程序,该程序将实现我们与小方块的初步交互。

2.4 简单的Demo开发

Demo目标:在Hololens2眼镜下,实现简单的人机交互(可以手动拖动、放大、缩小、旋转一个Cube方块)

2.4.1新建场景

*注:其实不新建,就用当前默认生成的场景也行。

在Unity菜单中,选择“文件”>“新建场景”,

在“新建场景”窗口中,选择“基本(内置)”,然后单击“创建”,创建一个新的场景,

接着在Unity菜单中,选择“混合现实”>“工具包”>“添加到场景并配置…”,将MRTK工具包添加到当前场景,

并在“层次结构”窗体中,单击“MixedRealityToolkit”,再在“检查器”窗口,看一看它的配置文件是否设置为“DefaultMixedRealityToolkitConfigurationProfile”,

DemoP1

然后保存。

2.4.2配置一个可交互的Cube

在场景中添加一个Cube,然后手动将它托到摄像机视野前方,大概0.2m的距离,再把Cube的大小缩小一些,因为1x1x1的立方体在现实生活中看着还挺大的,我们希望得到一个手掌大小的立方块。

(因为在Hololens眼镜中,用户的出生位置在(0,0,0),如果立方块放在这个位置,用户就需要移动才能看到了)

如果懒得手动拖,就给Cube设置一个固定的值吧,给大伙儿一个参考值:

位置:X= 0, Y = -0.1,Z = 0.5

旋转:X=0, Y=0, Z=0

缩放:X=0.1, Y=0.1, Z=0.1

接着我们可以为这个Cube添加相关组件(这些组件都是MRTK提供给开发人员的),

一个能被手交互、抓取的对象,必须有以下组件:

①碰撞器;②Interactable;③NearInteractionGrabbable;

现在让我们来依次为Cube添加这些组件

DemoP2

DemoP3

此时我们单击“播放”按钮,在Unity编辑器内就已经可以初步体验人机交互了,

(摁住鼠标右键并滑动鼠标可以控制视角,将视野中心的原点移动到物体上时,长摁鼠标左键,可以移动该物体;“t”键可以呼出左手,并且通过摁住“Shift”控制左手的移动,“y”键可以呼出右手,并且通过摁住“Space”控制右手移动,两只手的点击都是通过鼠标左键触发)

至此,你已经学会了建立简单的可交互的对象,

你可以移步“3.1Hololens部署”进行该Demo的实机部署,并同过Hololens进行体验。

2.5 MRTK基础功能

本小节主要介绍常用的一些MRTK内置的功能,如需查看所有的MRTK功能,可以到微软查看。

2.5.1 输入系统
2.5.2 手部跟踪
2.5.3 眼动跟踪
2.5.4 配置文件
2.5.5 UI控件
2.5.6 求解器

2.6 第三人称视角开发

2.6.1 设置PUN(Photon Unity Networking)
2.6.2 连接多个用户
2.6.3 与多个用户共享运动
2.6.4 将Azure空间定位点集成到共享体验中

3.软件部署

3.1 Hololens2部署

完成所有的Unity开发、测试后,就可以生成当前的项目,在生成之前,记得做如下配置:

UWPSet

配置完成后,点击生成,等待生成完成。

待生成完成后,进入生成后的文件夹,点击文件夹下的“.sln”文件,使用VS2019打开。

HoloPublish

打开该项目的属性,如下图所示

HoloPublish1

接着配置对应的属性,其中第4步的ip填写Hololens2的主机ip,关于Hololens2的ip怎么获取,请在Hololens2语音开启时,对Hololens说“我的ip是什么”,发音标准的情况下,Hololens会弹窗告诉你它的ip,填上即可。

HoloPublish2

上述内容全都配置完成后,就可以部署解决方案了,如下图所示(Hololens2需要打开开发者模式,并且通过USB连接PC)

HoloPublish3

如果该电脑是第一次和Hololens链接,在该项目生成完成后,会向用户索取密钥,该密钥戴上Hololens设备就可以看到,将该密码输入即可继续部署。

部署完成后,就可以在Hololens中找到对应的App,打开后就可以体验你的软件了。

3.2 iPad部署