Contoh migrasi dari versi 4.6 ke versi 4000: migrasi sample SpatialMap_Sparse_Localizing
Artikel ini menjelaskan cara memigrasikan sample SpatialMap_Sparse_Localizing dari EasyAR Sense Unity Plugin versi 4.6 ke versi 4000.
Mengganti paket plugin
Lihat panduan migrasi umum untuk mengganti paket plugin.
Membangun ulang scene (wajib)
Hapus AR Session dari scene:
Buat ulang AR Session:
Hapus Sparse SpatialMap dari scene:
Buat ulang Sparse SpatialMap:
Di jendela Inspector komponen Sparse SpatialMap Controller, isi ID dan Name sparse spatial map, lalu tentukan Tracker:
Tetapkan ulang ARSession dalam script sample ke AR Session (EasyAR) yang baru dibuat:
Tetapkan ulang MapController dalam script sample ke Sparse SpatialMap Controller yang baru dibuat:
Mengubah kode yang tidak kompatibel
Hapus kode yang mencetak Status di Start, lalu perbarui callback localization untuk sparse spatial map menjadi MapController.TargetFound dan MapController.TargetLost sesuai API versi baru:
Kode versi lama:
sparse = Session.GetComponentInChildren<SparseSpatialMapWorkerFrameFilter>(); if (string.IsNullOrEmpty(MapController.MapManagerSource.ID) || string.IsNullOrEmpty(MapController.MapManagerSource.Name)) { throw new UIPopupException("Map ID or Name NOT set, please set MapManagerSource on: " + MapController + Environment.NewLine + "To create SpatialMap, use <SpatialMap_SparseSpatialMap> sample." + Environment.NewLine + "To get Map ID and Name, use EasyAR Develop Center (www.easyar.com) -> SpatialMap -> Database Details." + Environment.NewLine + "Map ID is used when loading, it can be used to share maps among devices.", 100); } MapController.MapLoad += (map, status, error) => { GUIPopup.EnqueueMessage("Load map {name = " + map.Name + ", id = " + map.ID + "} into " + sparse.name + Environment.NewLine + " => " + status + (string.IsNullOrEmpty(error) ? "" : " <" + error + ">"), status ? 3 : 5); if (!status) { return; } GUIPopup.EnqueueMessage("Notice: load map (only the first time each map) will trigger a download in this sample." + Environment.NewLine + "Statistical request count will be increased (more details on EasyAR website)." + Environment.NewLine + "Map cache is used after a successful download." + Environment.NewLine + "Map cache will be cleared if SparseSpatialMapManager.clear is called or app uninstalled.", 5); }; MapController.MapLocalized += () => { GUIPopup.EnqueueMessage("Localized map {name = " + MapController.MapInfo.Name + "}", 3); }; MapController.MapStopLocalize += () => { GUIPopup.EnqueueMessage("Stopped localize map {name = " + MapController.MapInfo.Name + "}", 3); }; sparse.Localizer.startLocalization();Ubah menjadi:
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}}}"); };
Gunakan API baru di Update untuk menentukan apakah sparse spatial map ada dan dilacak secara langsung:
Kode versi asli:
private void Update() { Status.text = $"Device Model: {SystemInfo.deviceModel} {deviceModel}" + Environment.NewLine + "VIO Device" + Environment.NewLine + "\tType: " + ((Session.Assembly != null && Session.Assembly.FrameSource) ? Session.Assembly.FrameSource.GetType().ToString().Replace("easyar.", "").Replace("FrameSource", "") : "-") + Environment.NewLine + "\tTracking Status: " + Session.TrackingStatus + Environment.NewLine + "Sparse Spatial Map" + Environment.NewLine + "\tWorking Mode: " + sparse.WorkingMode + Environment.NewLine + "\tLocalization Mode: " + sparse.LocalizerConfig.LocalizationMode + Environment.NewLine + "Localized Map" + Environment.NewLine + "\tName: " + (sparse.LocalizedMap == null ? "-" : (sparse.LocalizedMap.MapInfo == null ? "-" : sparse.LocalizedMap.MapInfo.Name)) + Environment.NewLine + "\tID: " + (sparse.LocalizedMap == null ? "-" : (sparse.LocalizedMap.MapInfo == null ? "-" : sparse.LocalizedMap.MapInfo.ID)) + Environment.NewLine + "\tPoint Cloud Count: " + (sparse.LocalizedMap == null ? "-" : sparse.LocalizedMap.PointCloud.Count.ToString()) + Environment.NewLine + "Cube Location: " + (onSparse ? "On Sparse Spatial Map" : (Session.TrackingStatus.OnSome && Session.TrackingStatus != MotionTrackingStatus.NotTracking ? "Air" : "-")) + Environment.NewLine + Environment.NewLine + "Gesture Instruction" + Environment.NewLine + "\tMove to Sparse Spatial Map Point: One Finger Move" + Environment.NewLine + "\tScale: Two Finger Pinch"; 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.LocalizedMap) { var points = sparse.LocalizedMap.HitTest(viewPoint); foreach (var point in points) { onSparse = true; TouchControl.transform.position = sparse.LocalizedMap.transform.TransformPoint(point); break; } } } } }Ubah menjadi:
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; } } } } }
Pada tahap ini, scene dan script sample sudah diperbarui ke versi 4000.0 dan dapat berjalan.






