Unity接⼊HuaweiAREngine
说在前⾯
使⽤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的所有功能,以下是部分机型⽀持的功能介绍:
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模型识别真实环境的地⾯并放置
配置⽂件的属性介绍如下:
/**\if english
* Lighting mode of an configuration object. Default value is AMBIENT_INTENSITY。
* \else
* 配置项的光照模式。默认启动环境光。
* \endif
*/
public ARConfigLightingMode LightingMode = ARConfigLightingMode.AMBIENT_INTENSITY;
/**\if english
* Update mode of an configuration object. Default value is BLOCKING。
* \else
* 配置项的更新模式。默认阻塞模式。
* \endif
* \endif
*/
public ARConfigUpdateMode UpdateMode = ARConfigUpdateMode.BLOCKING;
/**\if english
* Power mode of an configuration object. Default value is NORMAL。
* \else
* 配置项的功耗模式。默认不使⽤低功耗。
* \endif
*/
public ARConfigPowerMode PowerMode = ARConfigPowerMode.NORMAL;
/
**\if english
* Item of depth switch of an configuration object. Default value is \c true。
* \else
* 配置项的深度开关。默认打开深度流。
* \endif
*/
public bool EnableDepth = true;
/**\if english
* Item of mask switch an configuration object. Default value is \c false.
* \else
* 配置项的遮罩开关。默认关闭遮罩功能。
* \endif
*/
public bool EnableMask = false;
/**\if english
* Item of scenemesh switch an configuration object. Default value is \c false.
* \else
* 配置项的环境Mesh开关。默认关闭环境Mesh。
* \endif
*/
public bool EnableMesh = false;
/**\if english
* Enable semantic plane mode. Default value is \c false.
* \else
image pro plus* 配置使能语义识别平⾯模式。默认关闭。
* \endif
*/
public bool SemanticPlaneMode = false;
/**\if english
* The way the configuration item is opened by the camera. The camera is turned on internally by default. * \else
* 配置项的相机打开⽅式。默认内部打开相机。
* \endif
*/
public int ImageInputMode = 0;
/**
* \if english
* Focus mode of this configuratioin. Default is FIXED_FOCUS.
* \else
* 对焦模式,默认是锁定对焦到⽆穷远。
* \endif
*/
public ARConfigFocusMode FocusMode = ARConfigFocusMode.FIXED_FOCUS;
/**
* \if english
* Select the behavior of the plane detection subsystem. Default is Enable.
* \else
* 设置平⾯检测的⾏为,默认使能。
* \endif
*/
public ARConfigPlaneFindingMode PlaneFindingMode =ARConfigPlaneFindingMode.ENABLE;
///@cond ContainImageAR
/**
/**
* \if english
* Set the database of image tracking. Default is null.
* \else
* 设置图像跟踪的数据库。
* \endif
*/
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类
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论