EasyAR4.0在去年底推出,新增了运动跟踪,稀疏云地图等功能。

注册,基本设置

EasyAR使用需要先注册用户,平面图像跟踪,物体跟踪,表面跟踪的功能只需要添加“Sense License Key”即可。如果需要使用稀疏云地图,则还需要添加“API KEY”

Sense License Key是和应用的Package Name/Bundle ID绑定的。

在导入EasyAR SDK以后,点击菜单【EasyAR–Change License Key】或者目录【EasyAR/Resources/EasyAR】下的【Settings】文件,即可输入key。

总体结构

EasyAR官方把很多东西做成了预制件,多数情况下直接使用预制件即可。

【EasyAR】和【RenderCamera】是必须的内容,根据类型,搭配【VideoCameraDevice】和【VIOCameraDevice】。

【Focus Mode】官方说明

需要将Camera设置为单色黑色背景,不能使用天空盒

平面图像跟踪

平面图像跟踪中,每个被跟踪的图像对应一个【ImageTarget】,【ImageTarget】需要指定【ImagetTracker】。同时显示的数量由【Simultaneous Target Number】决定。target 和 tracker都可以是多个。

程序控制方面,【ImageTargetController】有对应事件,官方例子【ImageTracking_Targets】有参考。

        private void AddTargetControllerEvents(ImageTargetController controller)        {            if (!controller)            {                return;            }             controller.TargetFound += () =>            {                Debug.LogFormat(“Found target {{id = {0}, name = {1}}}”, controller.Target.runtimeID(), controller.Target.name());            };            controller.TargetLost += () =>            {                Debug.LogFormat(“Lost target {{id = {0}, name = {1}}}”, controller.Target.runtimeID(), controller.Target.name());            };            controller.TargetLoad += (Target target, bool status) =>            {                imageTargetControllers[controller] = status ? true : imageTargetControllers[controller];                Debug.LogFormat(“Load target {{id = {0}, name = {1}, size = {2}}} into {3} => {4}”, target.runtimeID(), target.name(), controller.Size, controller.Tracker.name, status);            };            controller.TargetUnload += (Target target, bool status) =>            {                imageTargetControllers[controller] = status ? false : imageTargetControllers[controller];                Debug.LogFormat(“Unload target {{id = {0}, name = {1}}} => {2}”, target.runtimeID(), target.name(), status);            };        } 3D物体跟踪

3D物体跟踪和平面图像跟踪基本一样,区别只是跟踪时候的文件设置不一样。程序处理时候事件是在【ObjectTargetController】下。

表面跟踪

表面跟踪是在设备不支持运动跟踪情况下的退而求其次的选择,不建议使用。

启动后,【WorldRoot】游戏对象会在当前设备位置固定下来,摄像头参照移动。

运动跟踪

运动跟踪对设备有要求,具体看:Motion Tracking支持的设备

运动跟踪是稀疏云地图和稠密云地图的基础。

运动跟踪也是,启动以后,【WorldRoot】会在启动位置固定,摄像头根据移动变化。

稀疏云地图

稀疏云地图首先需要运动跟踪。

用MapWorker来控制Map。

【Locailzation Mode】官方说明,官方例子中,创建地图用UntilSuccess,加载地图用的是KeepUpdate

【Source Type】为【Map Builder】时是创建地图。【Map Manager】时是加载地图。

官方创建地图和加载地图的方法都在例子的【MapSession.cs】中。

保存方法是

MapWorker.BuilderMapController.Host(name, preview);
其中,preview是缩略图,可以为空。name也可以拾空字符串。通过MapHost事件返回结果。

            MapWorker.BuilderMapController.MapHost += (map, isSuccessful, error) =>            {                …            };            try            {                MapWorker.BuilderMapController.Host(name, preview);            }            catch (Exception e)            {                …            }

地图加载方式事件稍微多点,设置了map的ID和名称以后,设置MapLoad事件获取结果,MapLocalized和MapStopLocalize事件主要是用来获取状态。

    controller.MapManagerSource = meta.Map;    …    controller.MapLoad += (map, status, error) =>    {        …    };     controller.MapLocalized += () =>    {        …    };    controller.MapStopLocalize += () =>    {        …    }; MapWorker.Localizer.startLocalization(); 稠密空间地图 

稠密空间地图比运动跟踪的搭建跟简单,把官方的prefab直接拖到场景中即可。默认的地图是可以和物体发生碰撞的。

 

在官方的例子里,只演示了如何显示隐藏地图。

public void RenderMesh(bool show) { if (!dense) { return; } dense.RenderMesh = show; } public void TransparentMesh(bool trans) { if (!dense) { return; } dense.MeshColor = trans ? Color.clear : meshColor; }

EasyAR4.0简单的使用说明

 

快三大小单双稳赚买法都在例子的【MapSession.cs】中。

保存方法是

MapWorker.BuilderMapController.Host(name, preview);
其中,preview是缩略图,可以为空。name也可以拾空字符串。通过MapHost事件返回结果。

            MapWorker.BuilderMapController.MapHost += (map, isSuccessful, error) =>            {                …            };            try            {                MapWorker.BuilderMapController.Host(name, preview);            }            catch (Exception e)            {                …            }

地图加载方式事件稍微多点,设置了map的ID和名称以后,设置MapLoad事件获取结果,MapLocalized和MapStopLocalize事件主要是用来获取状态。

    controller.MapManagerSource = meta.Map;    …    controller.MapLoad += (map, status, error) =>    {        …    };     controller.MapLocalized += () =>    {        …    };    controller.MapStopLocalize += () =>    {        …    }; MapWorker.Localizer.startLocalization(); 稠密空间地图 

稠密空间地图比运动跟踪的搭建跟简单,把官方的prefab直接拖到场景中即可。默认的地图是可以和物体发生碰撞的。

 

在官方的例子里,只演示了如何显示隐藏地图。

public void RenderMesh(bool show) { if (!dense) { return; } dense.RenderMesh = show; } public void TransparentMesh(bool trans) { if (!dense) { return; } dense.MeshColor = trans ? Color.clear : meshColor; }

EasyAR4.0简单的使用说明