ARCore 配置

什么情况下需要使用ARCore

EasyAR本身的功能并不依赖ARCore,EasyAR的功能也不一定需要在有ARCore的情况下才能运行。但在运行一些功能的时候,你可能会希望在支持ARCore的设备上使用ARCore的运动跟踪功能。

关于运动跟踪:EasyAR的运动跟踪功能(MotionTracker)与ARCore的运动跟踪功能是类似的,在Unity插件中,一个典型的ARSession会根据具体配置及设备支持情况来选择使用哪个运动跟踪功能。

在使用以下这些功能的时候,你是需要运行一个运动跟踪算法的,这时可以考虑使用ARCore,以便在支持ARCore的设备上使用ARCore的运动跟踪。如果在这些功能时不使用ARCore,一般情况下将使用EasyAR自身的运动跟踪功能。

  • 运动跟踪

  • 识别平面并在平面上放置物体(这时你需要使用EasyAR Motion Tracker或AR Foundation)

  • 稀疏空间地图

  • 稠密空间地图

  • 运动融合

  • 云空间地图

需要注意的是,在一些设备上,比如Nreal眼镜上,运动跟踪功能来自眼镜设备本身,而非EasyAR或ARCore。

在仅使用以下这些功能的时候,你不需要使用运动跟踪算法,这时如有需要可以关闭ARCore的打包检查,

  • 平面图像跟踪(不使用运动融合)

  • 3D 物体跟踪(不使用运动融合)

  • 云识别

  • 多目标跟踪

  • 表面跟踪

选择 ARCore SDK

根据对ARCore的不同使用方式来更改 ARCore SDK 选项。

  • AR Foundation Or Optional: 随EasyAR或 AR Foundation 一起分发的ARCore SDK将会被包含在应用中,根据ARCore XR Plugin的设置决定。一般情况下推荐使用这个选项,它会自动处理 AR Foundation 的情况。

  • Optional: ARCore 功能在支持ARCore并安装了Google Play Services for AR的设备上可以使用。

  • Required: 应用将只能在支持ARCore并安装了Google Play Services for AR的设备上运行。

  • External: 如果你在使用 AR Foundation 或其它ARCore SDK分发,可以使用这个选项。这样随EasyAR一起分发的ARCore SDK将不会使用。你也可以使用这个选项来完全排除ARCore SDK在应用中的使用。

../_images/image_g4_1.png

关于 OptionalRequired 的详细说明及上线Google Play Store应用需要做的其它配置可以参考 Google的说明

使用随插件分发的 ARCore SDK

在EasyAR Sense Unity Plugin中,ARCore的支持所需的库文件和配置已经在插件包中,但要在手机上运行,仍需在手机上安装 Google Play Services for AR

EasyAR的ARCore 封装在使用随EasyAR一起分发的ARCore SDK时,不会要求使用GLES3,这与 AR Foundation 所使用的 ARCore XR Plugin 不同。但是我们没有导出 ARCore 的丰富功能。如果你需要使用ARCore的平面检测等功能,仍旧建议使用 AR Foundation

使用ARCore必须使用Gradle 5.6.4或更高版本打包。如果当前使用的Gradle版本过低,打包时会弹出错误信息,这时如果选择继续打包,将会打包失败。

../_images/image_g4_15.png

Unity 2019.4自带的Gradle版本低于上述要求,需按下面要求进行配置。对于其它版本的Unity,如果使用了自定义的Gradle,也需要确保Gradle版本满足要求。

Unity 2019.4

可以参考以下说明或 Google的说明 来更新工程使用的Gradle版本。

前往 Preferences > External Tools > Android > Gradle ,并设置Gradle为Gradle 5.6.4或更高版本。可以访问 Gradle构建工具 下载Gradle。

../_images/image_g4_13.png

前往 Project Settings > Player > Android tab > Publishing Settings > Build ,选择这两个,

  1. Custom Main Gradle Template

  2. Custom Launcher Gradle Template.

../_images/image_g4_14.png

然后根据下面描述修改这两个文件,

  • Assets/Plugins/Android/mainTemplate.gradle

  • Assets/Plugins/Android/launcherTemplate.gradle

删除文件顶部注释(如果存在),

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

然后在文件顶部插入以下几行,

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        // Must be Android Gradle Plugin 3.6.0 or later. For a list of
        // compatible Gradle versions refer to:
        // https://developer.android.com/studio/releases/gradle-plugin
        classpath 'com.android.tools.build:gradle:3.6.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

如果你使确实不需要使用ARCore,可以选择 Continue and disable ARCore ,或者选择 Disable AR Core 选项,这将关闭打包时的检查。如果在关闭ARCore的情况下使用EasyAR的ARCore封装(包含它在场景中时对其自动进行可用性检查),将在运行时弹出提示信息。

../_images/image_g4_10.png

Target Architecture

根据Google的政策,在arm64的设备上运行仅有armv7的程序,ARCore不会正常工作。在打包时如果未选择ARM64会弹出警告,

../_images/image_g4_11.png

这时需要修改项目配置,使用IL2CPP编译并选择ARM64支持。

../_images/image_g4_6.png

如确有需要,你可以选择 Continue and don't warn me again ,或者关闭 Verify 32bit Only AR Core When Build 选项,这将关闭打包时的检查。关闭检查只是在打包时不弹出提示,但运行时在一些设备上将有可能出现异常,包括但不限于崩溃或黑屏等。

../_images/image_g4_12.png

使用 AR Foundation的 ARCore SDK

如果需要使用 AR Foundation的 ARCore SDK,可以参考 Google的说明 进行配置,这时 ARCore SDK 选项需要选择 AR Foundation Or OptionalExternal

使用其它ARCore SDK

如果有其它第三方插件或项目内有ARCore SDK的分发,也可以使用这些ARCore SDK。这时 ARCore SDK 选项需要选择 External ,并根据具体插件或项目的要求进行配置。