Table of Contents

Exemple de migration de la version 4.6 vers la version 4000 : migration de l’exemple SpatialMap_Sparse_Building

Cet article explique comment migrer l’exemple SpatialMap_Sparse_Building de EasyAR Sense Unity Plugin version 4.6 vers la version 4000.

Remplacer le paquet plugin

Consultez le guide général de migration pour remplacer le paquet plugin.

Modifier le code incompatible : le moyen le plus rapide pour le faire fonctionner

Remplacez SparseSpatialMapWorkerFrameFilter dans le script d’origine MapBuilding_SparseSample par SparseSpatialMapBuilderFrameFilter :

Code de l’ancienne version :

private SparseSpatialMapWorkerFrameFilter sparse;

Modifiez en :

private SparseSpatialMapBuilderFrameFilter sparse;

Mettez à jour dans Awake le code qui récupère SparseSpatialMapBuilderFrameFilter :

Code de l’ancienne version :

sparse = Session.GetComponentInChildren<SparseSpatialMapWorkerFrameFilter>();

Modifiez en :

Session.StateChanged += (state) =>
{
    if (state == ARSession.SessionState.Ready)
    {
        sparse = Session.Assembly.FrameFilters.Where(f => f is SparseSpatialMapBuilderFrameFilter).FirstOrDefault() as SparseSpatialMapBuilderFrameFilter;
    }
};

Supprimez le code qui affiche Status dans Update, puis mettez à jour la référence au sparse spatial map vers sparse.Target selon la nouvelle API :

Code de l’ancienne version :

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;
                }
            }
        }
    }
}

Modifiez en :

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;
                }
            }
        }
    }
}

À ce stade, l’exemple peut déjà s’exécuter essentiellement.

Reconstruire la scène : préparer l’utilisation des nouvelles fonctions

Supprimez le nœud Sparse SpatialMap dans la scène :

Supprimez AR Session dans la scène :

Recréez AR Session :

Réaffectez ARSession dans le script d’exemple au nouvel AR Session (EasyAR) :

À ce stade, la scène et le script de l’exemple ont été mis à jour vers la version 4000.0 et peuvent être exécutés.

Sujets associés