与 AR Foundation 协同工作

什么情况下需要使用AR Foundation

Unity AR Foundation封装了一些跨平台的运动跟踪能力,请阅读 运动跟踪与EasyAR功能 来了解EasyAR功能与运动跟踪的关系,以及是否需要和什么时候需要使用AR Foundation。

EasyAR 支持的 AR Foundation 版本

EasyAR Sense Unity Plugin 支持 AR Foundation 4.1.3 或更新版本。

AR Foundation的支持是通过EasyAR Sense的自定义相机实现的。使用个人版的EasyAR Sense license或使用试用版本的Mega服务时,如果运行时选择了自定义相机,EasyAR每次启动将只能使用100秒。使用付费版本的EasyAR Sense和付费的EasyAR Mega服务没有这个限制。

EasyAR Sense Unity Plugin 暂时还没有支持 AR Foundation 5 的 XROrigin ,因此在AR Foundation 5中,仍需使用 ARSessionOrigin。你也可以自行修改脚本进行支持。

导入 AR Foundation Package

使用Unity Package Manager导入 AR Foundation Unity Package,

../_images/image_g7_1.png

注意:请确保安装你能获取的最新的AR Foundation版本,Unity经常会修复一些bug,有时候这些bug会非常影响使用。上图示意不会跟着AR Foundation发布更新,请以官方版本号为准。

为了在 Android 或 iOS 上使用 AR Foundation,通常还需要导入 ARCore XR Plugin 或 ARKit XR Plugin Unity package 到工程中。遵循 AR Foundation 介绍 来配置必要的package。

../_images/image_g7_11.png

注意:请确保安装的包的版本一致,在某些情况下,版本号不同会导致AR Foundation工作不正常,Unity并没有合理的自动化的机制来确保这一点。

导入 EasyAR Sense Unity Plugin

通过Unity的 Package Manager window 来 使用本地tarball文件安装插件。

../_images/image_s0_1.png

在弹出的对话框中选择 com.easyar.sense-*.tgz 文件。

导入 EasyAR Sense Unity Plugin AR Foundation Extension

通过Unity的 Package Manager window 来 使用本地tarball文件安装插件。

../_images/image_g7_10.png

在弹出的对话框中选择 com.easyar.sense.ext.arfoundation-*.tgz 文件。

如在导入这个package之前没有添加 AR Foundation ,它会自动被添加。但是由于Unity的包依赖机制不太完善,添加进的包可能是老版本的,请在包管理中查看并确保

  1. AR Foundation 升级到最新版本,如不是最新版请更新到最新版

../_images/image_g7_12.png
  1. 根据需要添加 ARCore XR Plugin 或 ARKit XR Plugin ,并保证其版本与 AR Foundation 一致

../_images/image_g7_11.png
  1. 确保安装的 ARCore XR Plugin 或 ARKit XR Plugin 等版本与 AR Foundation 一致,如不一致需手动更新

../_images/image_g7_13.png ../_images/image_g7_14.png

导入和使用sample

使用Mega时,你需要请阅读 Mega Unity开发样例使用说明 。以下sample使用说明仅针对不使用Mega的情况。

样例随插件包一起分发。可以使用 Unity的 Package Manager window 将样例导入工程中。

../_images/image_g7_15.png

需要注意的是,这些sample不在 EasyAR Sense Unity Plugin 包里面,而在 EasyAR Sense Unity Plugin ARFoundation Extension 包内。

在使用sample之前建议先参考 AR Foundation 介绍 来配置必要的package。建议先运行 Unity官方的AR Foundation sample 来确保AR Foundation可以正常工作。

除了上述差异外,使用方法与其它sample一致,可参考 样例使用说明 。

Sample简介

使用Mega时,你需要请阅读 Mega Unity开发样例说明

SpatialMap_Building 样例展示了一个非常简单的使用场景,来使SpatialMap功能在AR Foundation环境下工作。

MotionTracking_Fusion 样例展示了一种高级使用,可以在app启动时根据设备能力选择 frame source ,以及允许运行时在所有可用 frame source 间切换。为了实现这种用法,你需要deactive AR Foundation使用的所有GameObject,并设置所有frame source可用性检查所需要的数值,然后在AR Foundation的frame source被选择后active AR Foundation 的GameObject。

../_images/image_g7_9.png

更多说明可以阅读 ARFoundationFrameSource 。

ImageTracking_MotionFusion 样例展示了在使用AR Foundation时通过 EasyAR 运动融合 来加强图像跟踪功能。这个样例同时演示了如何兼容支持和不支持AR Foundation及其它运动跟踪能力的设备。

在AR Foundation场景中添加EasyAR支持

准备可运行AR Foundation的场景

接下来这一部分假设你有一个已经可以使用AR Foundation的场景。你可以遵循 AR Foundation 介绍 来创建一个可以使用和运行 AR Foundation的场景。

使用Unity Hub创建新工程时选择 AR, Core 就会创建一个这样的场景。

../_images/image_g7_16.png

一个典型的 AR Foundation 场景包含一个 AR Session 和一个 AR Session Origin.

../_images/image_g7_2.png

注意: AR Foundation 通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。

在场景中添加 EasyAR 组件

在场景中添加EasyAR的AR Session。可以使用GameObject菜单中的 EasyAR Sense > Ext: AR Foundation > * 来添加预设好的AR Session。

../_images/image_g7_3.png

如有必要你也可以自己组装AR Session,需要注意在AR Session中包含 ARFoundationFrameSource 。

为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSource 为 FirstAvailableActiveChild 并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,

../_images/image_g7_5.png

或者也可以设置 ARComponentPicker.FrameSource 为 Specify 并手动指定为 ARFoundationFrameSource 。

../_images/image_g7_6.png

然后需要在场景中创建 Target 或 Map,比如,如果你需要使用 稀疏空间地图 建图功能,你需要使用 EasyAR Sense > SpatialMap > Map : Sparse SpatialMap 创建 SparseSpatialMapController ,

../_images/image_g7_4.png

最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g7_8.png

你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。

在EasyAR场景中添加AR Foundation支持

准备可运行EasyAR的场景

接下来这一部分假设你有一个已经可以使用EasyAR的场景。你可以参考 样例使用说明 来使用sample,或参考 从零创建可运行的工程 创建一个全新的场景。

删除Main Camera

AR Foundation内有Camera,大部分情况下需要先删除场景中现有的Camera。

../_images/image_g7_17.png

在一些高级的用法中,你可以根据自己需要判断是否删除。

在场景中添加 EasyAR AR Foundation 支持组件

在AR Session中添加 ARFoundationFrameSource ,选中 AR Session (EasyAR) 或 Frame Source Group ,然后通过菜单 EasyAR Sense > Ext: AR Foundation > Frame Source : AR Foundation 添加。

../_images/image_g7_7.png

将 ARFoundationFrameSource 移动到第一个。

../_images/image_g7_18.png

在一些高级的用法中,你可以根据自己需要判断它的位置,也可以在代码中修改。

为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSource 为 FirstAvailableActiveChild 并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,

../_images/image_g7_5.png

或者也可以设置 ARComponentPicker.FrameSource 为 Specify 并手动指定为 ARFoundationFrameSource 。

../_images/image_g7_6.png

在场景中添加 AR Foundation 组件

你可以遵循 AR Foundation 介绍 来添加AR Foundation的组件。

大部分情况下,你需要使用菜单 XR > AR Session 和 XR > AR Session Origin 添加AR Foundation的组件(如与AR Foundation官方说明冲突,请以官方说明为准)。

../_images/image_g7_19.png

注意: AR Foundation 通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。

最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g7_8.png

你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。

在运行之前,请确保阅读 AR Foundation 介绍 来了解一个有AR Foundation的场景应该如何进行配置和运行。