Esempio di migrazione dalla versione 4.6 alla versione 4000: migrazione dell'esempio SpatialMap_Sparse_Building
Questo articolo spiega come migrare l'esempio SpatialMap_Sparse_Building da EasyAR Sense Unity Plugin versione 4.6 alla versione 4000.
Sostituire il pacchetto plugin
Fare riferimento alla guida generale alla migrazione per sostituire il pacchetto plugin.
Modificare il codice incompatibile: il modo più rapido per renderlo eseguibile
Sostituire SparseSpatialMapWorkerFrameFilter nello script originale MapBuilding_SparseSample con SparseSpatialMapBuilderFrameFilter:
Codice della versione precedente:
private SparseSpatialMapWorkerFrameFilter sparse;Modificare in:
private SparseSpatialMapBuilderFrameFilter sparse;
Aggiornare in Awake il codice che ottiene SparseSpatialMapBuilderFrameFilter:
Codice della versione precedente:
sparse = Session.GetComponentInChildren<SparseSpatialMapWorkerFrameFilter>();Modificare in:
Session.StateChanged += (state) => { if (state == ARSession.SessionState.Ready) { sparse = Session.Assembly.FrameFilters.Where(f => f is SparseSpatialMapBuilderFrameFilter).FirstOrDefault() as SparseSpatialMapBuilderFrameFilter; } };
Rimuovere il codice che mostra Status in Update e aggiornare il riferimento al sparse spatial map in sparse.Target in base alla nuova API:
Codice della versione precedente:
private void Update() { Status.text = $"Device Model: {SystemInfo.deviceModel} {deviceModel}" + Environment.NewLine + "Frame Source: " + ((Session.Assembly != null && Session.Assembly.FrameSource) ? Session.Assembly.FrameSource.GetType().ToString().Replace》("easyar.", "").Replace("FrameSource", "") : "-") + Environment.NewLine + "Tracking Status: " + Session.TrackingStatus + Environment.NewLine + "Sparse Point 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 + " Move to Sparse Spatial Map Point: One Finger Move" + Environment.NewLine + " Scale: 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; } } } } }Modificare in:
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; } } } } }
A questo punto l'esempio può già essere eseguito in pratica.
Ricostruire la scene: prepararsi all'uso delle nuove funzioni
Eliminare il nodo Sparse SpatialMap nella scene:
Eliminare AR Session nella scene:
Ricreare AR Session:
Riassegnare ARSession nello script di esempio al nuovo AR Session (EasyAR):
A questo punto la scene e lo script dell'esempio sono stati aggiornati alla versione 4000.0 e possono essere eseguiti.



