与 AR Foundation 协同工作¶
什么情况下需要使用AR Foundation¶
Unity AR Foundation封装了一些跨平台的运动跟踪能力,请阅读 运动跟踪与EasyAR功能 来了解EasyAR功能与运动跟踪的关系,以及是否需要和什么时候需要使用AR Foundation。
如果你需要在所有支持ARCore的小米和红米手机上使用ARCore,请使用AR Foundation。由于小米厂商实现有bug,EasyAR的ARCore实现已经禁用部分小米手机,包括米9、米10、红米K20、红米K30、红米K40等系列(这里列出的不全)。在这些手机上,默认配置下将不会使用ARCore,在支持EasyAR云端跟踪的手机上会使用EasyAR运动跟踪。
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服务没有这个限制。
导入 AR Foundation Package¶
使用Unity Package Manager导入 AR Foundation
Unity Package,
注意:请确保安装你能获取的最新的AR Foundation版本,Unity经常会修复一些bug,有时候这些bug会非常影响使用。上图示意不会跟着AR Foundation发布更新,请以官方版本号为准。
为了在 Android 或 iOS 上使用 AR Foundation,通常还需要导入 ARCore XR Plugin
或 ARKit XR Plugin
Unity package 到工程中。遵循 AR Foundation 介绍 来配置必要的package。
注意:请确保安装的包的版本一致,在某些情况下,版本号不同会导致AR Foundation工作不正常,Unity并没有合理的自动化的机制来确保这一点。
导入 EasyAR Sense Unity Plugin¶
通过Unity的 Package Manager window 来 使用本地tarball文件安装插件。
在弹出的对话框中选择 com.easyar.sense-*.tgz
文件。
导入 EasyAR Sense Unity Plugin AR Foundation Extension¶
通过Unity的 Package Manager window 来 使用本地tarball文件安装插件。
在弹出的对话框中选择 com.easyar.sense.ext.arfoundation-*.tgz
文件。
如在导入这个package之前没有添加 AR Foundation
,它会自动被添加。但是由于Unity的包依赖机制不太完善,添加进的包可能是老版本的,请在包管理中查看并确保
AR Foundation
升级到最新版本,如不是最新版请更新到最新版
根据需要添加
ARCore XR Plugin
或ARKit XR Plugin
,并保证其版本与AR Foundation
一致
确保安装的
ARCore XR Plugin
或ARKit XR Plugin
等版本与AR Foundation
一致,如不一致需手动更新
导入和使用sample¶
使用Mega时,你需要请阅读 Mega Unity开发样例使用说明 。以下sample使用说明仅针对不使用Mega的情况。
样例随插件包一起分发。可以使用 Unity的 Package Manager window 将样例导入工程中。
需要注意的是,这些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开发样例说明
ARFOnly_SpatialMap_Building 样例展示了一个非常简单的使用场景,来使SpatialMap功能在AR Foundation环境下工作。
ARFFirst_MotionTracking_PlaneDetection 样例展示了一种高级使用,可以在app启动时根据设备能力选择 frame source ,以及允许运行时在所有可用 frame source 间切换。为了实现这种用法,你需要deactive AR Foundation使用的所有GameObject,并设置所有frame source可用性检查所需要的数值,然后在AR Foundation的frame source被选择后active AR Foundation 的GameObject。
更多说明可以阅读 ARFoundationFrameSource 。
ARFFirst_ImageTracking_MotionFusion 样例展示了在使用AR Foundation时通过 EasyAR 运动融合 来加强图像跟踪功能。这个样例同时演示了如何兼容支持和不支持AR Foundation及其它运动跟踪能力的设备。
在AR Foundation场景中添加EasyAR支持¶
准备可运行AR Foundation的场景¶
接下来这一部分假设你有一个已经可以使用AR Foundation的场景。你可以遵循 AR Foundation 介绍 来创建一个可以使用和运行 AR Foundation的场景。
使用Unity Hub创建新工程时选择 AR, Core
就会创建一个这样的场景。
一个典型的 AR Foundation 场景包含一个 AR Session
和一个 AR Session Origin
.
注意: AR Foundation
通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。
在场景中添加 EasyAR 组件¶
在场景中添加EasyAR的AR Session。可以使用GameObject菜单中的 EasyAR Sense > Ext: AR Foundation > *
来添加预设好的AR Session。
如有必要你也可以自己组装AR Session,需要注意在AR Session中包含 ARFoundationFrameSource 。
为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。
通常可以设置 ARComponentPicker.FrameSource 为 FirstAvailableActiveChild
并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,
或者也可以设置 ARComponentPicker.FrameSource 为 Specify
并手动指定为 ARFoundationFrameSource 。
然后需要在场景中创建 Target 或 Map,比如,如果你需要使用 稀疏空间地图
建图功能,你需要使用 EasyAR Sense > SpatialMap > Map : Sparse SpatialMap
创建 SparseSpatialMapController ,
最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,
你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。
在EasyAR场景中添加AR Foundation支持¶
准备可运行EasyAR的场景¶
接下来这一部分假设你有一个已经可以使用EasyAR的场景。你可以参考 样例使用说明 来使用sample,或参考 从零创建可运行的工程 创建一个全新的场景。
删除Main Camera¶
AR Foundation内有Camera,大部分情况下需要先删除场景中现有的Camera。
在一些高级的用法中,你可以根据自己需要判断是否删除。
在场景中添加 EasyAR AR Foundation 支持组件¶
在AR Session中添加 ARFoundationFrameSource ,选中 AR Session (EasyAR)
或 Frame Source Group
,然后通过菜单 EasyAR Sense > Ext: AR Foundation > Frame Source : AR Foundation
添加。
将 ARFoundationFrameSource 移动到第一个。
在一些高级的用法中,你可以根据自己需要判断它的位置,也可以在代码中修改。
为了让EasyAR与 AR Foundation协同使用, 需要注意在AR Session启动后 ARFoundationFrameSource 可以被选择为Session的frame source。
通常可以设置 ARComponentPicker.FrameSource 为 FirstAvailableActiveChild
并确保 ARFoundationFrameSource 的transform顺序是所有可以使用的frame source的第一个,
或者也可以设置 ARComponentPicker.FrameSource 为 Specify
并手动指定为 ARFoundationFrameSource 。
在场景中添加 AR Foundation 组件¶
你可以遵循 AR Foundation 介绍 来添加AR Foundation的组件。
大部分情况下,你需要使用菜单 XR > AR Session
和 XR > AR Session Origin
添加AR Foundation的组件(如与AR Foundation官方说明冲突,请以官方说明为准)。
注意: AR Foundation
通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。
最后,一个简单的可以在使用AR Foundation运行稀疏空间地图建图功能的场景可能是这样的,
你所使用的场景可能会根据使用的 AR Foundation 或EasyAR Sense Unity Plugin 功能不同而不同。
在运行之前,请确保阅读 AR Foundation 介绍 来了解一个有AR Foundation的场景应该如何进行配置和运行。