使用Unity进行AR开发的开发者基本都会遇到华为手机的坎:由于谷歌的制裁,ARCore并不能覆盖华为的新机型导致新的机型已经不能使用ARFoundation方案;使用第三方通用的ARsdk也并不能完美兼容常用的华为机型,毕竟官方原生的sdk才是最适配自身机型的。最近我也在学习接入HuaweiAREngine与ARFoundation兼容使用的项目,搜集了一些解决方案并进行了总结,由于unity相关的方案官方迟迟还没有更新(官方也关闭了旧的2.0版本的下载入口 ),下面提供的sdk版本也是测试版本,仅供学习使用。
一、简介
Huawei AR Engine 是⼀个在 Android 智能⼿机上构建增强现实应用程序的平台。目前支持的功能包括:
- 运动跟踪
- 平面检测
- 光照估计和命中测试
- 手势识别和骨骼跟踪
- 人体骨骼跟踪
- 人体蒙版
- 图像跟踪
- 场景网格
- 面部表情
以下是官方给出的支持列表:
| 服务 | 设备类型 | 设备型号 |
|---|---|---|
| AR Engine服务 | 华为P系列 | P50 Pro、P40 系列、P30、P30Lite、P30 Pro、P20、P20 Pro |
| 华为Mate系列 | Mate 40 系列、Mate 30 系列、Mate X、Mate Xs、Mate 20 X (5G)、Mate RS、Mate 20 X、Mate 20、Mate 20 Pro、Mate 20 RS、Mate X 2 (TET) | |
| 华为Nova系列 | nova 8、nova 8 Pro、nova 7、nova 7 Pro、nova 6、nova 6 (5G)、nova 5、nova 5 Pro、nova 5i Pro、nova 5z、nova 4、nova 4e、nova 3 | |
| 华为畅想系列 | 畅享9 Plus | |
| 华为麦芒系列 | 麦芒7 | |
| 荣耀手机 | 荣耀30、荣耀30 Pro、荣耀30 Pro+、荣耀30S、荣耀V30、荣耀V30 Pro、荣耀20、荣耀20 Pro、荣耀V20、荣耀10、荣耀9x、荣耀9X Pro、荣耀8X、荣耀Magic2、荣耀 Play | |
| 平板系列 | M6、MatePad、MatePad Pro |
但并不是列表上的机型都支持Huawei Engine的所有功能,以下是部分机型支持的功能介绍:
| AR类型 | 是否启动深度 | 手机型号 |
| WorldAR | 不支持 | Mate20系列,P20系列,Nova3,麦芒5,荣耀V20系列 |
| BodyAR | 不启动 | Mate20系列,P20系列,Nova3,麦芒5,荣耀V20系列 |
| BodyAR | 启动 | 荣耀V20系列 |
| HandAR | 不启动 | Mate20系列,P20系列,Nova3,麦芒5 ,荣耀V20系列 |
| HandAR | 启动 | Mate20 Pro |
| FaceAR | 启动 | Mate20 Pro |
| WorldBodyAR | 不启动 | Mate20系列,P20系列,Nova3,麦芒5,荣耀V20系列 |
| WorldBodyAR | 启动(world不支持,body启动) | 荣耀V20系列 |
目前华为官网上是找不到unity相关的sdk,但目前华为论坛上还是存在内测版的Huawei AR Engine的unitypackage,我这边有两个unitypackage的版本,分别对应不同的unity版本使用
其中:
1.arenginesdk-sample-unity-2.0.0.5环境要求:
- 手机EMUI版本9.0以上
- 在应用市场下载并安装AREngine
- Unity 2017.4LTS 以上 Unity2019.4LTS以下的版本
环境要求:
- 手机EMUI版本9.0以上
- 在应用市场下载并安装AREngine
- Unity2020LTS以上的版本
因为Huawei AREngine需要用到一个ARBackgroundRenderer的类来渲染AR场景,这个类在2020以上的版本已经被其他的类取代,但AREngine找不到引用所以导致报错
所以建议Unity2019LTS以下的版本使用2.0的版本,Unity2020以上的版本只能使用3.0以上的版本,开发者需要根据自己的unity版本来使用sdk。
三、SDK的接入与使用因为2.0与3.0除了一些细节部分外使用的流程基本一致,所以这里就不分开直接一起说明。导入sdk后,在Example文件夹可以查看官方提供的所有demo
每个demo文件夹下有对应的功能配置,每个场景都需要加载对应的配置才能正常使用, 这里只挑一个demo作简单介绍。
WorldARSample这个demo主要是演示AR模型识别真实环境的地面并放置
配置文件的属性介绍如下:
public ARConfigLightingMode LightingMode = ARConfigLightingMode.AMBIENT_INTENSITY;
public ARConfigUpdateMode UpdateMode = ARConfigUpdateMode.BLOCKING;
public ARConfigPowerMode PowerMode = ARConfigPowerMode.NORMAL;
public bool EnableDepth = true;
public bool EnableMask = false;
public bool EnableMesh = false;
public bool SemanticPlaneMode = false;
public int ImageInputMode = 0;
public ARConfigFocusMode FocusMode = ARConfigFocusMode.FIXED_FOCUS;
public ARConfigPlaneFindingMode PlaneFindingMode =ARConfigPlaneFindingMode.ENABLE;
///@cond ContainImageAR
public ARAugmentedImageDatabase AugmentedImageDatabase = null;
开发者可以根据自己需要的功能对配置表进行配置。
使用Huawei AREngine sdk开发时有些需要注意的细节:
1.判断设备是否可用AR,可以查阅sdk中的AREnginesSelector.cs类
AREnginesAvaliblity aREnginesAvaliblity = AREnginesSelector.Instance.CheckDeviceExecuteAbility();
if ((AREnginesAvaliblity.HUAWEI_AR_ENGINE&&aREnginesAvaliblity) != 0)
{
AREnginesSelector.Instance.SetAREngine(AREnginesType.HUAWEI_AR_ENGINE);
}}
2.检测设置是否已经安装AR的依赖(AREngine.apk),可以查阅sdk中的AREnginesApk.cs类
bool installRequested = false;
switch (AREnginesApk.Instance.RequestInstall(!installRequested))
{
case ARInstallStatus.INSTALL_REQUESTED:
installRequested = true;
return;
case ARInstallStatus.INSTALLED:
break;
}
3.AR功能的启用,可以查阅ARSession.cs类
public static void CreateSession()
{
ARSessionManager.Instance.CreateSession();
}
四、应用的导出与使用
输出版本是建议是选择android 24以上的版本
在使用2.0版本的sdk时,输出sdk前需要在project setting->huawei AR ,把Huawei AR Required勾选上,不然输出的版本可能会黑屏
如果设置了上面的选项还是出现黑屏的情况,那还需要检查是否有开启Camera的权限,可以修改工程的AndroidManifest.xml来增加camera权限,或者直接在脚本上增加权限检测的代码
public void CheckAndroidPermission()
{
#if UNITY_ANDROID && !UNITY_EDITOR
Debug.Log("====申请安卓的摄像机权限");
permissionList.Add(Permission.Camera);
foreach (string permission in permissionList)
{
if (Permission.HasUserAuthorizedPermission(permission))
{
}
else
{
Permission.RequestUserPermission(permission);
}
}
#endif
}
如果以上都设置了还是使用不了AR功能的话,就需要检查下机型是否支持AR,是否已经安装AREngine的apk等等。
五、小结华为AREngine sdk输出的工程能在华为的机型(本人测试的设备是mate pad)下流畅运行,基本与同等硬件的ARCore机型的效果差不多,甚至会更好一点。而且作为兼容方案与ARFoundation一起输出也并不会冲突,可以用作华为机型与ARCore机型的解决方案(启动前先做设备支持性的检测),期待官方正式版的发布!
附件最后附上两个版本的Huawei Engine SDK
2.0版本:arenginesdk-sample-unity-2.0.0.5.zip
链接:https://pan.baidu.com/s/1mi2-dASmvfgxIQ-ahb8wHQ
提取码:6fgl
3.0版本:arenginesdk-sample-unity-3.0.0.11.zip
链接:https://pan.baidu.com/s/1xIHjwnzloS2LcZYCeGhXHQ
提取码:h6su



