迁移sample SpatialMap_Sparse_Localizing 到 4000.0¶
替换插件包¶
关闭Unity
删除Unity打包生成的平台编译目录(Android的Gradle工程目录,以及iOS的XCode目录)或整个Library文件夹。
重新打开Unity工程,将老版本的EasyAR Sense Unity Plugin从工程中移除
导入4000.0版本的EasyAR Sense Unity Plugin
重新构建场景(必须):准备使用新功能¶
将场景中的AR Session(EasyAR)重新创建
将场景中的Sparse SpatialMap重新创建
在 Sparse SpatialMap Controller 组件的Inspector 窗口中,填入稀疏地图的ID和Name,并指定Tracker
将Sample脚本中的 ARSession 重新指定为新创建的 AR Session(EasyAR)
将Sample脚本中的 MapController 重新指定为新创建的 Sparse SpatialMap Controller
修改不兼容代码:¶
在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版本的插件运行