List
SpaceTracker, ImageTracker 동시 사용
Posted Date: 2024-03-28 7:33     Edited Date: 2024-04-05 4:01     Writer: jwkim9612

1. SDK Version: 6.2.0
2. Development Environment: (eg. Unity-Android, Unity-iOS, Native Android, Native iOS) Unity-Android
3. Tracker/Scanner: SpaceTracker, ImageTracker
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise): Free
5. Target Device(Optional):

안녕하세요. 1번 공간에서는 SpaceTracker를 2번 공간에서는 ImageTracker를 사용하게 하려고합니다.

ImageTracker를 사용중에 SpaceTracker 사용으로 넘어가려고할 때

TrackerManager.GetInstance().StopTracker();
StopCamera();

두 가지 함수 이후에 

CameraDevice.GetInstance().SetARCoreTexture();
CameraDevice.GetInstance().SetFusionEnable();
CameraDevice.GetInstance().Start();
TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_SPACE);

를 사용하는데 아래와 같은 로그가 발생하며 화면이 멈춰있는 상태가 됩니다. 해결 방법이 있을까요?

Posted Date: 2024-03-29 1:51     Edited Date: 2024-03-29 1:51     Writer: hnrjang

안녕하세요. MAXST AR SDK를 사용해 주셔서 감사합니다.

사용하고자 하는 트래커 종류를 변경 하실 때 카메라 Stop을 하신 후, TrackerManager의 StopTracker, DestroyTracker 를 호출 하신 후 새로운 트래커를 시작하셔야합니다. 

혹시 ImageTracker 씬이 OnDestroy 될 때 아래 코드가 있는지 확인 부탁드립니다.

CameraDevice.GetInstance().Stop(); 
TrackerManager.GetInstance().StopTracker();
TrackerManager.GetInstance().DestroyTracker();

다른 궁금한 점이나 도움이 필요한 사항이 있으시면 언제든지 문의해 주세요.

감사합니다.

 
Hannah

MAXST Support Team

Posted Date: 2024-03-29 5:58     Edited Date: 2024-03-29 5:58     Writer: jwkim9612

씬을 변경하진 않고 하나의 씬에서

ImageTracker 버튼을 누르면 

CameraDevice.GetInstance().Stop(); 
TrackerManager.GetInstance().StopTracker();
TrackerManager.GetInstance().DestroyTracker(); 실행 후

CameraDevice.GetInstance().Start();
TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE); 이 실행되게 해놓았고

 

SpaceTracker 버튼을 누르면

CameraDevice.GetInstance().Stop(); 
TrackerManager.GetInstance().StopTracker();
TrackerManager.GetInstance().DestroyTracker(); 실행 후

CameraDevice.GetInstance().SetARCoreTexture();
CameraDevice.GetInstance().SetFusionEnable();
CameraDevice.GetInstance().Start();
TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_SPACE); 가 실행되게 해놓았습니다.

 

유니티 에디터에서는 버튼을 번갈아 누르면 카메라가 잠시 멈췄다가 동작을 하는데 빌드된 앱에서는 ImageTracker 상태에서 SpaceTracker버튼을 누르면 카메라가 멈춰버립니다. 로그에는 SpaceTracker가 정상적으로 작동할 때와 같은 로그가 뜨긴합니다. 그 상태로 다시 ImageTracker를 누르면 다시 카메라가 정상적으로 작동됩니다. 반대의 경우도 마찬가지입니다. 뭐가 문제일까요ㅠㅠ

그리고 카메라 Stop을 하지 않고 Image Tracker, Space Tracker를 변경하는 방법도 있을까요?

Posted Date: 2024-03-29 6:35     Edited Date: 2024-03-29 6:35     Writer: hnrjang

카메라의 경우 ImageTracker와 SpaceTracker에서 사용되는 카메라가 내부적으로 다르기 때문에 Stop 후 재시작 해주어야 합니다.

또한, TrackerManager.GetInstance().DestroyTracker(); 를 한 후, 너무 짧은 시간내 새로운 트래커를 실행하면 이슈가 발생 할 수 있습니다.

카메라를 Stop하고 DestroyTracker 하는 로직과, 카메라를 Start하고 StartTracker 하는 로직을 나눠서 조금 텀을 주고 실행해보시기 바랍니다. (ex. 이미지트래커 시작, 이미지트래커 종료, 스페이스트래커 시작, 스페이스트래커 종료 버튼을 만들어 테스트해 보세요)

그럼에도 같은 이슈가 계속 발생한다면 언제든지 문의해 주세요.

감사합니다.

 
Hannah

MAXST Support Team

Posted Date: 2024-03-29 7:08     Edited Date: 2024-03-29 7:08     Writer: jwkim9612

말씀해주신대로 4가지 버튼을 만들어서 하나씩 천천히 눌러보면서 테스트를 해봤는데 위에 증상과 똑같은 현상이 발생하네요

Posted Date: 2024-04-02 5:41     Edited Date: 2024-04-02 5:43     Writer: sejin

아래는 트래커 및 카메라 뒤처리, 재실행 코드입니다.

다른 궁금한 점이나 도움이 필요한 사항이 있으시면 언제든지 문의해 주세요.

감사합니다.

// ImageTrackerSample.cs

    public void ImageTrackerDestroy()
    {
        OnDestroy();
        cameraBackgroundBehaviour.CleanUp();
    }

    public void StartSpaceTracker()
    {
        if (TrackerManager.GetInstance().IsFusionSupported())
        {
            CameraDevice.GetInstance().SetARCoreTexture();
            CameraDevice.GetInstance().SetFusionEnable();
            CameraDevice.GetInstance().Start();
            TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_SPACE);
            StartCoroutine(AddSpaceTrackerData());
        }
        else
        {
            TrackerManager.GetInstance().RequestARCoreApk();
        }
    }

// AbstractCameraBackgroundBehaviour.cs

// CameraBackgroundBehaviour 오브젝트를 초기화해야함.

        public void CleanUp()
        {
            if (rgbTexture != null)
            {
                Destroy(rgbTexture);
                rgbTexture = null;
            }

            if (rgbaTexture != null)
            {
                Destroy(rgbaTexture);
                rgbaTexture = null;
            }

            if (yTexture != null)
            {
                Destroy(yTexture);
                yTexture = null;
            }

            if (uvTexture != null)
            {
                Destroy(uvTexture);
                uvTexture = null;
            }

            if (uTexture != null)
            {
                Destroy(uTexture);
                uTexture = null;
            }

            if (vTexture != null)
            {
                Destroy(vTexture);
                vTexture = null;
            }

            if (u16bitTexture != null)
            {
                Destroy(u16bitTexture);
                u16bitTexture = null;
            }

            if (v16bitTexture != null)
            {
                Destroy(v16bitTexture);
                v16bitTexture = null;
            }

            textureCreateDone = false;
        }

Shelden

MAXST Support Team

Posted Date: 2024-04-03 13:36     Edited Date: 2024-04-03 13:36     Writer: jwkim9612

덕분에 해결됐습니다. 감사합니다.

다른 문제가 또 있어서.. SpaceTracker를 사용하면 카메라에 찍히는 화면의 색상이 반전(?) 되는 현상이 발생하는데 이건 왜그런걸까요? 아래 사진보면 일정부분의 색상들이 파란색으로 나옵니다.

Posted Date: 2024-04-05 4:01     Edited Date: 2024-04-05 4:01     Writer: sejin

테스트해본 결과 화면 색상이 바뀌는 현상이 재현되지 않습니다.

새로운 프로젝트를 생성해서 위의 코드를 그대로 사용하였을 때도 같은 결과가 발생하는지 알려주시기 바랍니다.

감사합니다.

 

Shelden

MAXST Support Team