ARFoundation集成SenseAR(一)

tech2024-04-09  51

最近做的ARFoundation应用需要兼容更多的设备,尤其是华为设备。因为被老美制裁后,新的机型已经不再加入ARCore支持列表之中,既想要兼容更多的新设备,又要还是使用一套跨平台开发的代码,自然就想到了国产版的ARCore,也就是商汤的SenseAR。

虽然说SenseAR已经整合到了ARFoundation中,但之前尝试了好多次操作,找官方demo\安装特供版unity、安装XRServer插件、替换ARFoundation版本,各种操作都试过了基本没有运行成功,也就没了下文。

本来想百度下资料,结果就搜到官网跟几条介绍,基本没啥可以参考的信息,只能是硬着头皮弄了。虽然最后这次的尝试总算是成功了,但也是从头到尾踩坑,这里把遇到的坑都总结一下。

首先是装unity的版本,这里贴上官方的公告https://connect.unity.com/p/shang-tang-senseargun-yi-kai-fa-huan-jing-ying-jian-yao-qiu-ji-zhi-chi-gong-neng?app=true

这里标明是需要中国增强版才能够使用SenseAR的,而且只能是2018的LTS,官方给的链接已经不能使用了,查了下官方资料才发现中国特供版就是LTS版,于是把2018下载好了,等到测试的时候发现打包安卓出错,而且打包输出的格式与我现在用的2019版的安卓工程打包方法已经是不一样了(参考我这篇的说明 https://blog.csdn.net/ssssssilver/article/details/108326480),而且原本我的工程使用的一些特性只能在2019之后的版本使用,所以使用2018的版本来开发这一方案直接否决。

于是又下载了Unity2019.4.9LTS,想试下强行使用。打开Package Manager查看了下 SenseAR的说明,发现SenseAR已经更新到了3.1.0-preview.8的版本!

点击Links的View document可以查看功能说明文档,附上文档https://note.ms/sensear

从文档的介绍可以看到SenseAR基本可以实现ARCore跟ARKit的几乎所有功能了,而且还有一个手势识别,可以说是相当厉害了!

接下来说下具体的版本配置

Unity的版本是2019.4.9LTS

ARFoundation 3.10-preview.8

ARSubsystems 3.10-preview.8

XRManagement 3.2.13

SenseAR 3.1.0-preview.1

加载完上面的插件后,可以在场景中添加ARSession Origin,ARSession两个组件,ARKit和ARCore的场景只要有这两个组件就可以启动AR摄像头。SenseAR的话还需要增加一个SenseARModeSet的组件,在里面勾选自己需要的功能。

同时还要在ProjectSettings的XRPlugin Management与XR选项中添加SenseAR,这一操作主要是让app调用硬件的senseAR核心的,添加完后工程中会多出几个配置文件,选择默认值就好。

创建一个类用来判断是否能启用senseAR,挂在AR Session Origin组件上。

public class StartSenseAR : MonoBehaviour { [SerializeField] ARSession m_Session; public ARRaycastManager raycastManager; IEnumerator Start() { Promise<SessionAvailability> promise = new SenseARSessionSubsystem().GetAvailabilityAsync(); yield return promise; Debug.Log("senseAR的状态"+ promise.result); yield return 0; } }

promise.result的返回值是SessionAvailability跟ARSessionState类似,如果配置正常的话,会输出supported。

public enum SessionAvailability { None = 0, Supported = 2, Installed = 4 } public enum ARSessionState { None = 0, Unsupported = 1, CheckingAvailability = 2, NeedsInstall = 3, Installing = 4, Ready = 5, SessionInitializing = 6, SessionTracking = 7 }

上面的工作完成后就可以打包输出了。输出android apk前还需要配置一下设置 PlayerSettings中的Player选项,需要把Graphics API中 的vulkan选项去掉,并且取消勾选Multithreaded rendering,同时API compatibility Level需要设置成.net 4.x,Minimun API Level设置成Android 8.1以上。这些都是senseAR要求的设置。

打包输出打安卓手机上后,如果发现有闪退现象的话可以检查下XRServer有没有安装,这个是senseAR的核心,类似ARCore核心。如果没有意外能正常运行安装包的话,是会正常启用摄像头,android logcat上会输出是否支持senseAR的信息

大概就这样了,有空再整理下ARFoundation把ARKit、ARCore、SenseAR三个都整合到一起的方案。

最新回复(0)