迁移sample SpatialMap_Sparse_Localizing 到 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

重新构建场景(必须):准备使用新功能

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

../../_images/image_u3_3.png ../../_images/image_u3_4.png

将场景中的Sparse SpatialMap重新创建

../../_images/image_u3_6.png ../../_images/image_u3_7.png

在 Sparse SpatialMap Controller 组件的Inspector 窗口中,填入稀疏地图的ID和Name,并指定Tracker

../../_images/image_u3_8.png

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

../../_images/image_u3_5.png

将Sample脚本中的 MapController 重新指定为新创建的 Sparse SpatialMap Controller

../../_images/image_u3_9.png

修改不兼容代码:

../../_images/image_u3_1.png ../../_images/image_u3_2.png

在Start中去掉打印Status的代码,根据新版本API将本地稀疏地图的定位回调更新为MapController.TargetFound和MapController.TargetLost

private void Start()
{
    var launcher = "AllSamplesLauncher";
    if (Application.CanStreamedLevelBeLoaded(launcher))
    {
        var button = BackButton.GetComponent<Button>();
        button.onClick.AddListener(() => { UnityEngine.SceneManagement.SceneManager.LoadScene(launcher); });
    }
    else
    {
        BackButton.gameObject.SetActive(false);
    }

    sparse = Session.GetComponentInChildren<SparseSpatialMapWorkerFrameFilter>();

    MapController.TargetFound += () =>
    {
        Debug.Log($"Found target {{name = {MapController.Info.Name}}}");
    };

    MapController.TargetLost += () =>
    {
        if (!MapController) { return; }
        Debug.Log($"Lost target {{name = {MapController.Info.Name}}}");
    };
}

在Update中使用新的API判断本地稀疏地图是否存在且被直接跟踪

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 (MapController && MapController.IsDirectlyTracked)
            {
                var points = MapController.HitTest(viewPoint);
                foreach (var point in points)
                {
                    onSparse = true;
                    TouchControl.transform.position = MapController.transform.TransformPoint(point);
                    break;
                }
            }
        }
    }
}

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