迁移sample SpatialMap_Sparse_Building 到 4000.0

替换插件包

  1. 关闭Unity

  2. 删除Unity打包生成的平台编译目录(Android的Gradle工程目录,以及iOS的XCode目录)或整个Library文件夹。

  3. 重新打开Unity工程,将老版本的EasyAR Sense Unity Plugin从工程中移除

../../_images/image_u1_1.png
  1. 导入4000.0版本的EasyAR Sense Unity Plugin

../../_images/image_u1_2.png

修改不兼容代码:最快可运行

../../_images/image_u2_1.png ../../_images/image_u2_2.png ../../_images/image_u2_3.png

将原MapBuilding_SparseSample脚本中的 SparseSpatialMapWorkerFrameFilter 替换为 SparseSpatialMapBuilderFrameFilter

private SparseSpatialMapBuilderFrameFilter sparse;

在Awake中更新获取 SparseSpatialMapBuilderFrameFilter 的代码

Session.StateChanged += (state) =>
{
    if (state == ARSession.SessionState.Ready)
    {
        sparse = Session.Assembly.FrameFilters.Where(f => f is SparseSpatialMapBuilderFrameFilter).FirstOrDefault() as SparseSpatialMapBuilderFrameFilter;
        TouchControl.TurnOn(TouchControl.gameObject.transform, Session.Assembly.Camera, false, false, true, false);
    }
};

在Update中去掉打印Status的代码,根据新版本API将本地稀疏地图的引用更新为sparse.Target

private void Update()
{
    if (Input.touchCount == 1 && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
    {
        var touch = Input.touches[0];
        if (touch.phase == TouchPhase.Moved)
        {
            var viewPoint = new Vector2(touch.position.x / Screen.width, touch.position.y / Screen.height);
            if (sparse && sparse.Target)
            {
                var points = sparse.Target.HitTest(viewPoint);
                foreach (var point in points)
                {
                    TouchControl.transform.position = sparse.Target.transform.TransformPoint(point);
                    break;
                }
            }
        }
    }
}

此时Sample已经基本可以运行

重新构建场景:准备使用新功能

删除场景中的Sparse SpatialMap节点

../../_images/image_u2_4.png

将场景中的AR Session(EasyAR)重新创建

../../_images/image_u2_5.png ../../_images/image_u2_6.png

将Sample脚本中的 ARSession 重新指定为新创建的 AR Session(EasyAR)

../../_images/image_u2_7.png

此时Sample已经可以基于4000.0版本的插件运行