Table of Contents

버전 4.6에서 버전 4000 인스턴스로 마이그레이션: SpatialMap_Sparse_Building 예제 마이그레이션

이 문서는 SpatialMap_Sparse_Building 예제를 EasyAR Sense Unity Plugin 버전 4.6에서 4000 버전으로 마이그레이션하는 방법을 설명합니다.

플러그인 패키지 교체

일반 마이그레이션 가이드를 참조하여 플러그인 패키지를 교체합니다.

비호환 코드 수정: 가장 빠른 실행 가능 상태

원본 MapBuilding_SparseSample 스크립트의 SparseSpatialMapWorkerFrameFilterSparseSpatialMapBuilderFrameFilter로 교체합니다:

원본 버전 코드:

private SparseSpatialMapWorkerFrameFilter sparse;

수정 후:

private SparseSpatialMapBuilderFrameFilter sparse;

Awake 메서드에서 SparseSpatialMapBuilderFrameFilter를 가져오는 코드를 업데이트합니다:

원본 버전 코드:

sparse = Session.GetComponentInChildren<SparseSpatialMapWorkerFrameFilter>();

수정 후:

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

Update 메서드에서 Status 출력 코드를 제거하고, 새 버전 API에 맞게 sparse.LocalizedMap 참조를 sparse.Target로 업데이트합니다:

원본 버전 코드:

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 +
        "\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;
                }
            }
        }
    }
}

수정 후:

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

이제 예제가 기본적으로 실행 가능합니다.

씬 재구성: 새 기능 사용 준비

씬에서 Sparse SpatialMap 노드를 삭제합니다:

씬에서 AR Session을 삭제합니다:

AR Session을 새로 생성합니다:

예제 스크립트의 ARSession을 새로 생성된 AR Session (EasyAR)로 지정합니다:

이제 예제 씬과 스크립트가 모두 4000.0 버전으로 업데이트되어 실행 가능합니다.

관련 주제