EasyAR1.3迁移指南

EasyAR 1.3有一些接口变化。你可能需要做一些修改来完成从老版本到EasyAR 1.3的迁移。

Unity

首先,建议删除Assets/EasyAR下的所有文件然后从新的unity package或样例中复制或导入。如果你有修改里面的文件,请确保在替换之前先备份修改然后在导入新文件之后重新应用之前的改动。 通常建议不要修改这个文件夹里的文件,而是继承里面的脚本,这样以后的升级也会容易一些。

Prefabs

EasyAR现在相比之前的版本多了很多prefab。Primitives里面是一些可以和其他prefab组合一起使用的prefab。而Com posites里面是一些预先组合好的样例,可以直接使用。

例如,EasyAR_ImageTracker-1_Barcode-1就是原来的EasyAR prefab + 1 ImageTracker + 1 BarcodeScanner。

以前版本中的EasyAR prefab被重命名为了EasyAR_Startup。它和EasyAR_ImageTracker- 1的结构一样,是EasyAR + 1 ImageTracker。

ImageTracker prefab和BarCodeScanner prefab可以放在场景里面,然后ARBuilder会自动连接场景中的物体。你也可以修改脚本内的调用来手动启动这些功能。

工作流

整个工作流和构建过程已经改变。但是如果你没有对脚本调用挖掘很深,你可能不会注意到这些变化。

BarcodeScanner现在和ImageTracker的工作方式相同。今后还会有更多类似的物体,比如CloudRecognizer。

如果你在手动构建EasyAR,你需要将一些部件bind到一起。unbind接口已经被删除,并由bind(null)替代。当一个物体bind到 另一个物体的时候,之前bind的物体将会自动unbind并从对方删除自己。比如,当ImageTargetBaseBehoviour bind 到一个ImageTrackerBaseBehaviour的时候如果target已经被load到了其他tracker中,它将先被unload, 然后如果tracker已经启动工作,它将被立即load进tracker,否则它将在tarcker启动之后被load进去。

Target和Tracker

你需要在inspector面板上指定target需要load到的tracker。之前只有在脚本中load target才需要指定tracker,现在在editor里面也需要这么做。如果一个ImageTarget prefab被拖到场景里,并且场景中也有active的tracker,那么一个默认的tracker将会被分配。更多信息参考关于 EasyAR 多目标 的文章。

如果要动态实现这个功能,你可能需要调用ImageTargetBaseBehaviour.Bind。1.3版本中Bind的行为有很大变化 。它不再仅仅是静态绑定,同时也替代了LoadIntoTrackerBehaviour(1.3之前)的功能, 而Bind(null)则完成了UnloadFromAllTrackers(1.3之前)的功能。

Target事件

ITargetEventHandler已经从代码中删除。现在事件处理中心是在AugmenterBaseBehaviour。许多时间将在Aug menterBaseBehaviour拿到新的frame之后被触发。

现在ImageTrackerBaseBehaviour拥有自己的load/unload/found/lost事件。

全局事件处理可以使用每个ImageTrackerBaseBehaviour的load/unload事件,以及AugmenterBaseBeh aviour的found/lost事件。

QRCode的事件也已被移动到AugmenterBaseBehaviour。

关于如何使用新的事件,你可以参考样例或 这篇文档

新特性

1.3有许多新特性,可以参考各自的API文档来获得这些新特性的描述。

  • 多目标跟踪

  • 水平翻转camera输入

  • 显示/隐藏RealityPlane(camera图像)

  • 使用index打开camera

  • 在FrameUpdate中修改pose

Native

Native端的变化并没有Unity端那么大。一些头文件已经重命名,所以建议删除所有头文件然后从新的包中或样例中复制或导入新的头文件。

工作流

整个工作流和构建过程已经改变。

Augmenter现在需要首先attach到camera然后才能拿到frame。

Augmenter.newFrame接口改变,不再接收输入参数。

Augmenter.drawVideoBackground不会修改调用者的view port,因此你现在需要分别维护你自己的viewport以及Augmenter的viewport。

Augmenter.drawVideoBackground可以直接画到texture上,前提是已经通过setVideoBackgroundT extureID设置了有效的texture id。

新特性

1.3有许多新特性,可以参考各自的API文档来获得这些新特性的描述。

  • 多目标跟踪

  • 水平翻转camera输入