Unity接入Huawei AR Engine

2023-11-08

说在前面 

 

使用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模型识别真实环境的地面并放置

配置文件的属性介绍如下:

        /**\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
         */
        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
         * 配置使能语义识别平面模式。默认关闭。
         * \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类

        /**
         * \if english
         * @brief Request to insatll the <em>HUAWEI AR Engine.apk</em> synchronously.
         * 
         * We recommand you to call this method in 
         * <a href="https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationPause.html">OnApplictionPause(bool)</a>. 
         * When the application starts, set \c userRequestedInstall=true.
         * If <em>HUAWEI AR Engine.apk</em> is installed and compatiable, this method will return 
         * \link ARInstallStatus.INSTALLED\endlink immediately.
         * Otherwise, this function will firstly check current device availability. If the device is supported, this function 
         * show a window to prompt user. If user agree, it will jump to huawei application store. And then this function returns
         * \link ARInstallStatus.INSTALL_REQUESTED\endlink.
         * 
         * When your application resume, you should call this method again with \c userRequestedInstall=false. 
         * This will either return INSTALLED or throw an exception indicating the reason that installation could not be completed.
         * @param userRequestedInstall If set \c true, override the previous installation failure message and perform the installation again.
         * @return The Install status of HUAWEI AR Engine.
         * \else
         * @brief 同步请求安装<em>HAUWEI AR Engine.apk</em>。
         * 
         * 推荐在<a href="https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationPause.html">OnApplictionPause(bool)</a>
         * 中调用该方法。
         * 
         * 当应用启动时,设置 \c userRequestedInstall=true。如果已经安装<em>HUAWEI AR Engine.apk</em>并且与SDK版本兼容,该方法将直接
         * 返回\link ARInstallStatus.INSTALLED\endlink。否则,该方法将首先检查设备的兼容性。如果设备支持,该方法将弹出一个提示框,提示用户跳转
         * 到华为应用市场下载。
         * 
         * 当下载完成后,应用恢复,应用应该用\c userRequestedInstall=false 调用该方法。该方法将返回INSATLLED或者抛出异常。
         * @param userRequestedInstall 如果为\c true,将清除之前请求安装的错误信息,重新请求。
         * @return HUAWEI AR Engine的安装状态。
         * \endif
         * @exception ARUnavailableDeviceNotCompatibleException \copybrief ARUnavailableDeviceNotCompatibleException
         * @exception ARUnavailableEmuiNotCompatibleException \copybrief ARUnavailableEmuiNotCompatibleException
         * @exception ARUnavailableUserDeclinedInstallationException \copybrief ARUnavailableUserDeclinedInstallationException
         * @exception ARUnavailableConnectServerTimeOutException \copybrief ARUnavailableConnectServerTimeOutException
         */
bool installRequested = false;
switch (AREnginesApk.Instance.RequestInstall(!installRequested))
{    
    case ARInstallStatus.INSTALL_REQUESTED:      
        installRequested = true;    
        return;    
    case ARInstallStatus.INSTALLED:    
        break;
}

3.AR功能的启用,可以查阅ARSession.cs类

        /**
         * \if english
         * @brief Create a new ARSession.
         * 
         * Before calling this method, application must firstly confirm that HUAWEI AR Engine is installed 
         * and compatiable on current device. Otherwise, exceptions may throwed.
         * \else
         * @brief 创建一个新的会话。
         * 
         * 调用该方法前,应用应该首先保证引擎已经安装并且兼容,否则,将抛出异常。
         * \endif
         * @exception ARUnavailableServiceNotInstalledException \copybrief ARUnavailableServiceNotInstalledException
         * @exception ARUnavailableServiceApkTooOldException \copybrief ARUnavailableServiceApkTooOldException
         * @exception ARUnavailableDeviceNotCompatibleException \copybrief ARUnavailableDeviceNotCompatibleException
         * @exception ARUnavailableEmuiNotCompatibleException \copybrief ARUnavailableEmuiNotCompatibleException
         */
        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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity接入Huawei AR Engine 的相关文章

  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • HarmonyOS(十四)——状态管理之@State装饰器(组件内状态)

    前言 在 初识状态管理 我们了解了状态管理的基本概念 以及管理组件拥有的状态有哪几种装饰器 今天我们就来认识一下第一种装饰器 State装饰器 组件内状态 概述 State装饰的变量 或称为状态变量 一旦变量拥有了状态属性 就和自定义组件的
  • 解读 | VR体验式教育的优势 让教育触手可及

    大家好 我是极智视界 欢迎关注我的公众号 获取我的更多前沿科技分享 邀您加入我的知识星球 极智视界 星球内有超多好玩的项目实战源码和资源下载 链接 https t zsxq com 0aiNxERDq 很多孩子过多地沉浸在所谓的 传统教育
  • 【广州华锐互动】AR变电站交互仿真实训系统让你学生掌握专业技能

    随着科技的不断发展 智能变电站已经成为了电力系统的重要组成部分 为了提高电力系统的运行效率和安全性 培养高素质的电力工程技术人才 越来越多的高校和职业院校开始开设AR仿真实训课程 本文将为大家简单介绍一下广州华锐互动为知名电力集团开发的AR
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 【广州华锐互动】AR变电站交互仿真实训系统让你学生掌握专业技能

    随着科技的不断发展 智能变电站已经成为了电力系统的重要组成部分 为了提高电力系统的运行效率和安全性 培养高素质的电力工程技术人才 越来越多的高校和职业院校开始开设AR仿真实训课程 本文将为大家简单介绍一下广州华锐互动为知名电力集团开发的AR
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin

随机推荐

  • springcloud与springboot版本列表查看及依赖关系查看

    一 版本规则说明 1 springboot版本 Spring Boot 2 2 5 RELEASE表示主版本 次版本 增量版本 Bug修复 主要 版本中的第一个数字 2 和 3 是 Python 的著名 主要版本 主要部分是基于日历的最常见
  • (华硕)电脑第一次开机蓝屏,二次开机启动

    华硕主板 第一次开机蓝屏 二次开机启动 使用了无缓存的M 2 SSD 2个通道的SSD 修改开机模式 改成兼容模式启动
  • 【H5】阻止H5页面播放视频默认全屏

    老是看到有人找不到阻止视频默认全屏的问题 看到别人发的帖子不是隐藏video标签使用canvas绘制视频就是使用插件来禁止视频默认全屏的问题 其实没有那么麻烦的只需要设置一下属性就可以了 x5 playsinline true 安卓需要设置
  • gRPC-Java实现各种服务类型

    gRPC实现 借助gRPC 我们可以在一个 proto文件中定义一次服务 并以gRPC支持的任何语言生成客户端和服务器 而这又可以在从大型数据中心内的服务器到电脑的各种环境中运行 gRPC为您处理不同的语言和环境 还获得了使用协议缓冲区的所
  • 设计模式-Visitor模式(访问者模式)

    什么是访问者模式 另一个例子 双重分发 开闭原则 对扩展开放 对修改关闭 优缺点 什么是访问者模式 将数据结构与处理分离开来 比如一个人 他有自己的名字 他可以吃东西 这里的 人 就是一个数据结构 名字是属性 吃东西是行为方法 处理 pub
  • Apache Tomcat Websocket 教程

    WebSocket 是一种计算机通信协议 旨在在 Web 浏览器和 Web 服务器中实现 但它可以被任何客户端或服务器应用程序使用 WebSocket 协议是一个独立的基于 TCP 的协议 它与 HTTP 的唯一关系是它的握手被 HTTP
  • 过来人告诉你:Java学到什么程度可以找工作?

    大部分初次学习Java的同学都非常关注自己学到什么程度可以找工作就业 因为学习的目的一方面在于掌握知识 提高技能 另一方面就是就业谋生 今天笔者就来跟大家聊一聊一下Java学习到什么地步可以面试找工作 任何企业 不论大小 对于初级的Java
  • python 之 进程与线程区别、GIL锁产生背景及对Python性能的影响?python的多线程是假的,为啥还用多线程

    一 进程与线程区别 根本区别 进程是操作系统资源分配的基本单位 每个进程都有自己独立的地址空间 数据 堆栈和状态 线程是处理器任务调度和执行的基本单位 一个进程可以有多个线程 这些线程共享进程的地址空间和资源 资源开销 内存分配 进程创建新
  • linux 线程详解

    前言 程序运行在内存空间中叫进程 进程中包含有若干线程 线程是系统调度和执行的基本单位 线程才是程序运行的实体 通常程序里的main 函数就相当于主线程 把进程理解成一个容器 里面可以包含有若干线程和若干资源 进程环境变量 打开的文件描述符
  • RabbitMQ学习笔记3-Java连接rabbitmq

    Java连接rabbitmq 新建工程 Pom配置 代码 演示如何通过java连接rabbitmq 此代码为后面获取rabbitmq连接的工具代码 新建工程 新建一个maven project工程 名字为rabbitmq demo Pom配
  • Objective-C实现链式编程语法(DSL)

    您越着急开始写代码 代码就会花费越长的时间 Carlson University of Wisconsin 前言 熟悉Objective C这一门编程语言的人都知道 Objective C中方法的调用都是通过中括号 实现的 比如 self
  • 【1day】复现锐捷 NBR 路由器 存在任意文件上传漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞
  • 【Maven】添加ueditor到maven本地仓库

    命令行下执行 mvn install install file Dfile Users yqj Downloads utf8 jsp jsp lib ueditor 1 1 2 jar DgroupId com baidu ueditor
  • jq中寻找某个元素的特定兄弟元素

    利用var items this nextAll eq 2 text 举例如下 html代码 div class add div
  • 双管齐下,阿里内部都用的 Spring+MyBatis 源码手册,实战理论两不误

    目前大部分的 Java 互联网项目 都是用 Spring MVC Spring MyBatis 搭建平台的 使用 Spring IoC 可以有效的管理各类的 Java 资源 达到即插即拔的功能 通过 Spring AOP 框架 数据库事务可
  • AD——PCB布线实用技巧

    目录 一 元件布局基本规则 二 元件布线规则 三 在研制带处理器的电子产品时 如何提高抗干扰能力和电磁兼容性 一 元件布局基本规则 1 按电路模块进行布局 实现同一功能的相关电路称为一个模块 电路模块中的元件应采用就近 集中原则 同时数字电
  • 《JAVA核心知识》学习笔记(3. JAVA 集合)-2

    3 JAVA 集合 3 1 接口继承关系和实现 集合类存放于 Java util 包中 主要有 3 种 set 集 list 列表包含 Queue 和 map 映射 1 Collection Collection 是集合 List Set
  • Java web前端——JavaScript基础使用

    JavaScript概述 1 1 JavaScript简介 JavaScript LiveScript 一种解释性脚本语言 是一种动态类型 弱类型 基于原型继承的语言 内置支持类型 它的解释器被称为JavaScript引擎 为浏览器的一部分
  • 普通人如何抓住AI这个风口?

    无论是现在大火的AI 去年大火的元宇宙 虚拟炒房 还有之前的虚拟货币 疯狂的股市等等 普通人真正从中获得收益的 都是少数 风口其实本来就是少数人造富的神话 上一个10年的移动互联网风口 真正抓住的企业 也就那么几家 过去5年轰轰烈烈的新能源
  • Unity接入Huawei AR Engine

    说在前面 使用Unity进行AR开发的开发者基本都会遇到华为手机的坎 由于谷歌的制裁 ARCore并不能覆盖华为的新机型导致新的机型已经不能使用ARFoundation方案 使用第三方通用的ARsdk也并不能完美兼容常用的华为机型 毕竟官方