ARFoundation的入坑指南(一)
admin
2023-10-04 12:21:24
0

-----------------------------------写在正式开始之前--------------------------------------
本人现任一家AR创业公司Unity主程,公司有上线产品:神奇AR 。不知不觉已经做了3年的AR开发,也积累了这方面的一些经验,之后也许我会回归我最爱的游戏行业,觉得是时候把之前做AR相关的经验拿出来分享给大家,希望能够帮助到一些想要使用Unity进行AR开发的小伙伴。在正式开始之前,我想先简单介绍一些AR的概念,以及一些AR开发相关技术的发展历史。
1.什么是AR?
AR中文翻译为增强现实,不同于VR的沉浸式体验,AR更多是通过在真实世界增加一些虚拟元素提升视觉和交互上的体验,而传统的AR,观察真实世界一般通过硬件的摄像头,所以最早期的AR可能就是通过手机打开摄像头,然后在屏幕上添加一些3D或2D的视觉元素来实现。
2.什么是SLAM?
中文翻译是定位与实时构建,那么通俗的理解一下什么是slam,举个例子,上面第一条所说的单纯的开启摄像头,然后在屏幕上添加3D物体,那么随着你的手机的移动,这些3D物体都会随着你的手机屏幕一起移动,因为他们可以简单理解为是“贴”在屏幕上的,而slam则不同,拥有了slam技术的AR,当你把一个3D物体放置在空间中,随着你的手机移动,3D物体并不会跟随你的手机屏幕移动,而是会停留在原地,也就是他是有空间位置概念的,放在什么位置,他就定位在什么位置。
3.ARKit,ARCore,ARFoundation它们之间的关系
正如前面所说,早期的AR没有SLAM的支持,在做一些需要将物体定在原处的需求的时候,就无法实现。而ARKit和ARCore正是基于SLAM技术推出的AR开发用SDK,只不过ARKit是苹果公司出的,ARCore是谷歌公司出的,而他们最原始的SDK都是基于iOS和Android原生开发使用,后来Unity在早期出过一个UnityARKitPlugin的插件包,用来在Unity上使用ARKit开发(现在已经不推荐了,Unity资源商店也搜索不到了,据我所知只剩下bitbucket上有),谷歌提供的ARCore开发包有Unity版本的。事实上在我们公司早期也是分别使用UnityARKitPlugin和ARCore的Unity版来进行开发的,但这就有一个问题,事实上这两个SDK在功能上有许多的相似之处,例如SLAM,平面识别,图片识别等,但是却又是不同的API调用,所以即使你要开发一个AR App,需要同时会使用这两个SDK,而且使用上可能还略有区别,而也是基于这个原因,Unity推出了ARFoundation开发包,它的作用就是为了统一接口,这样你不必再关心如果是iOS平台要怎么使用SDK,安卓平台又要怎么使用,ARFoundation将他们两者做了一个封装,这样你只需关注你的AR应用开发本身,它的底层会自己判断根据不同的平台调用相应的API。

有了已上的相关基础知识,下面开始正式的ARFoundation的使用,本篇主要讲解如何在Unity中引入ARFoundation的开发包,以及运行一个最简单的AR示例。
1.创建一个新的Unity工程,我使用了最新的UnityLTS版本 2019.4(注意:较低的Unity版本可能无法使用ARFoundation)例如我这里叫TestARFoundation。然后将它切换到你要运行的手机平台,我这里用了iOS



紧接着我们来导入ARFoundation开发包,依次选择Window,PackageManager,然后在里面找到ARFoundation,考虑到之后可能会使用里面的新功能,所以我安装了4.0.8版本。另外务必确保ARKitXRPlugin或者ARCoreXRPlungin的版本和ARFoundation保持一致,否则可能会有问题。



由于我使用iPhone做开发,而底层的ARKit对一些手机的系统和设置是有要求的,例如硬件必须是iphone6S及已上机型必须是iOS11系统及以上,还需要在Unity的PlayerSettings里勾选require ARKit support 然后将程序运行的最小版本变为11.0,接着再把Architecture设置为ARM 64的,因为ARKit只能运行在ARM 64程序上。



最后,新版的ARFoundation还需设置一个ARSDK的loader,在XRPluginManagement里面,勾选对应平台的SDK即可。



这样我们ARFoundation前期的导入工作就完成了,然后我们新建一个空的场景,把里面的摄像机删掉,然后右键选择XR,分别创建两个东西出来,一个ARSessionOrigin和ARSession。这两个是运行AR功能的最基础的组件,把他们坐标记得都归零,然后新建一个球体,将它的坐标设置为0,0,1,先不用管为什么这么设置,然后我们就可以打包Xcode工程,然后编译运行了,如果是安卓平台则可以直接打出apk安装包,另外还需要先安装ARCore的支持包,一般来说,安卓手机运行AR应用发现没有ARCore的支持库的话会提示你到资源商店下载的。另外ARCore的运行对手机硬件也有要求,具体可以在google developer的ARCore相关里查询到,我自己知道的是小米8,华为p20以上的机型是支持的。
运行起来,我们就可以看到我们的摄像机前方有一个球体了。



相关内容