栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity接入Huawei AR Engine

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity接入Huawei AR Engine

说在前面 

 

使用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系列

二、Huawei AR Engine的unitypackage介绍

目前华为官网上是找不到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以下的版本
2.arenginesdk-sample-unity-3.0.0.11

环境要求:

  • 手机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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号