World Center Mode 설정
Please provide your development details as below;
1. SDK Version: 4.1.3
2. Development Environment: (eg. Unity-Android, Unity-iOS, Native Android, Native iOS) Unity2018.2.21f-Android
3. Tracker/Scanner: 이미지 트래커
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise):Pro-Subscription
5. Target Device(Optional):
https://developer.maxst.com/BoardQuestions/Details/711
https://developer.maxst.com/BoardQuestions/Details/698
확인 해보니 Maxst에서 제공하는 Image Tracker 씬에서 ARCamera의 World Center Mode의 기본 값이 Camera 인것을 확인 하였습니다.
저는 네비메쉬 사용 등의 이유로 World Center Mode의 값을 Target으로만 사용 해야합니다.
이전에 올렸던 글 중 4.1.1 프리팹을 삭제하고 4.1.3의 프리팹을 복사 붙여 넣었다고 올렸습니다.
붙여 넣은 씬을 다시 확인 해보니 AR Camera의 World Center Mode 설정은 Camera로 되어 있었습니다.
나머지 에러 나는 씬 전부는 Target으로 설정을 한 상태 였습니다.
제가 테스트 한 시나리오는 ABCD 4개의 씬이 있을 때 A,C를 일반 씬, B,D를 Maxst AR 설정 씬으로 하였습니다.
이 중 B는 World Center Mode 설정을 Target으로 D씬은 World Center Mode 설정을 Camera로 설정 하였을 때
A->B->C->D로 호출 하면 문제가 없습니다. A->D->C->D로 해도 문제가 없습니다.
하지만 A->D->C->B, A->B->C->B 순서로 호출 하면 B씬의 AbstractARManager.Update() 함수 에서 호출 하는 trackingResult.GetCount() {NativeAPI.maxst_TrackingResult_getCount(cPtr) } 에서 Crash가 발생합니다.
제가 테스트 한 결과 아래의 내용을 확인 하였습니다.
World Center Mode 설정을 Target으로 설정 한 B 씬을 최초 실행 한 첫프레임 일 때 AbstractARManager.Update 함수 안에서 TrackerManager.GetInstance().GetTrackingState()함수를 호출 하여 반환 된
TrackingState의 참조값은 항상 Null 입니다. 그 다음 호출 되는 ImageTrackerSample.Update 함수에서는 항상 TrackingState의 객체 참조를 통해 trackingResult.GetCount() {NativeAPI.maxst_TrackingResult_getCount } 갯수를 파악 하는데 문제가 없습니다.
이제 첫번째 호출 한 B 씬을 종료 후 다른 씬을 호출 한 후 B씬(B씬 뿐만 아니라 World Center Mode 설정을 Target으로 설정으로 한 다른 씬들)을 재차 호출 시 첫 프레임에서 이전과 달리
TrackingState은 Null이 아닌 참조값을 반환 합니다.
그 반환 된 참조값을 통해 trackingState.GetTrackingResult() 함수 호출 후 GetTrackingResult 함수에서 반환 된 TrackingResult 참조값을 통해 GetCount() { NativeAPI.maxst_TrackingResult_getCount(cPtr) } 함수를 호출 하면 그 때 Crash 가 발생 합니다.
제공 한 씬이 아닌 기본 Maxst SDK 유니티 패키지를 임포트 하여 여러번 테스트 한 결과입니다.
이에 대해 확인 바랍니다.
혹시 기존의 SDK 코드를 수정하신건 없으신가요?
혹은 AbstractARManager.cs 스크립트를 열어보시고,
void Update()
{
trackingState = TrackerManager.GetInstance().UpdateTrackingState();
...
}
위 구문이 적혀있는지 주석처리되어있는지 지워졌는지 확인바랍니다.
UpdateTrackingState가 되지 않으면, 트래킹 결과가 null이 들어옵니다.
확인하시고 답변주세요. 감사합니다.
Leo
Maxst Support Team
해당 코드를 주석 또는 지우지 않았습니다.
기존 코드를 수정 또는 삭제 하지 않았습니다.
항상 첫프레임만 널이 되고 해당 씬을 다시 호출 할 때는 Null 이 반환 되지 않고 그 상황에서만 Crash가 나는 것은 왜 그런것인가요?
문의 드립니다.
위 코드에서
TrackingState trackingState = TrackerManager.GetInstance().GetTrackingState(); 구문을
TrackingState trackingState = TrackerManager.GetInstance().UpdateTrackingState(); 문으로 바꿔서 실행해보시기 바랍니다.
UpdateTrackingState가 현재 트래킹 상태를 갱신해주는 문장인데, 해당 함수가 호출되지 않으면 Null이 반환됩니다.
감사합니다.
Leo
Maxst Support Team
이전 시나리오를 바탕으로 실행 한 결과 문제가 없는 것 같습니다.
감사합니다.
다행이네요. 무사히 출시하길 바라겠습니다.
감사합니다.
Leo
Maxst Support Team