迁移sample SpatialMap_Sparse_Building 到 4000.0¶
替换插件包¶
关闭Unity
删除Unity打包生成的平台编译目录(Android的Gradle工程目录,以及iOS的XCode目录)或整个Library文件夹。
重新打开Unity工程,将老版本的EasyAR Sense Unity Plugin从工程中移除
导入4000.0版本的EasyAR Sense Unity Plugin
修改不兼容代码:最快可运行¶
将原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节点
将场景中的AR Session(EasyAR)重新创建
将Sample脚本中的 ARSession 重新指定为新创建的 AR Session(EasyAR)
此时Sample已经可以基于4000.0版本的插件运行