Mega Go 추적 과정을 제어하기
이 문서는 다양한 앱 시나리오의 요구를 만족시키기 위해 Mega Go 추적 과정의 각 기능과 매개변수를 제어하는 방법을 설명합니다.
시작하기 전에
- 내 위치 기능을 사용할 수 있나요?를 확인해 올바른 지도가 다운로드되었는지 확인하세요.
tracker 작업 흐름
tracker 작업 흐름은 다음과 같습니다.
flowchart LR
subgraph startup_graph[시작]
direction TB
sstart((session 시작))
create[네이티브 생성]
load(target 로드)
verify[Trial 검증]
init_g[[초기화]]
end
subgraph init_graph[초기화]
direction TB
init_{6DoF 초기화 성공<br>또는 비 6DoF}
init[[로컬 tracking 초기화 과정]]
detecting[[감지]]
tracking_g[[Tracking]]
end
subgraph tracking_graph[Tracking]
direction TB
tracking[[지속 tracking]]
end
subgraph stopping_graph[정지]
direction TB
unload(target 언로드)
dispose[네이티브 파기]
sstop([session 정지])
end
sstart --> create --> load --> verify --> init_g
init --> init_ --> |Yes| detecting --> tracking_g
unload --> dispose --> sstop
init_ --> |No| init
startup_graph --> init_graph
init_graph --> tracking_graph
tracking_graph --> stopping_graph
흐름은 대략 여러 단계로 나뉩니다.
- 시작:
- session이 시작되면 네이티브 계층의 tracker가 생성됩니다.
- target의 Start() 이후 해당 target이 대응하는 tracker에 로드됩니다.
- 시험 데이터의 경우 온라인으로 시험 자격을 검증해야 하며, 검증에 성공한 뒤 다음 단계로 넘어갑니다.
- 초기화:
- 6DoF frame source를 사용할 때는 로컬 tracking 초기화 과정에 들어갑니다.
- 로컬 tracking 초기화에는 시간이 걸릴 수 있으며, 장면 복잡도와 장치 성능에 따라 달라지고 보통 frame source 하위 계층에서 사용하는 알고리즘과도 관련이 있습니다.
- 6DoF가 아닌 frame source를 사용할 때는 로컬 tracking 초기화 단계를 건너뛰고 바로 감지를 시작합니다.
- 감지 과정도 장면을 얼마나 쉽게 위치 파악할 수 있는지와 데이터 수집 및 매핑 품질에 따라 시간이 걸릴 수 있습니다.
- 기본 설정에서는 이 단계의 내용이 표시되지 않으며, ActiveController 컴포넌트 옵션으로 이 동작을 제어할 수 있습니다.
- 6DoF frame source를 사용할 때는 로컬 tracking 초기화 과정에 들어갑니다.
- 추적:
- tracker는 현재 block을 계속 추적합니다.
- 기본 설정에서는 tracking 상태(TargetController.IsTracked ==
true)인 target 노드 아래의 내용만 표시되며, 이 동작은 ActiveController 컴포넌트 옵션으로 제어할 수 있습니다.
- 중지:
- session이 중지되면 target이 언로드되고 네이티브 계층의 tracker가 파괴됩니다.
장치 지원 수준 조정
MegaGoTrackerFrameFilter의 MegaGoTrackerFrameFilter.MinInputFrameLevel 속성은 Mega가 지원하는 최소 장치 수준을 지정하는 데 사용됩니다.
![]()
Mega Go는 거의 모든 종류의 frame source에서 실행될 수 있지만, frame source마다 tracking 결과에 미치는 영향이 다릅니다.
기본적으로 Mega는 장치가 지원하는 가장 높은 수준의 frame source를 tracking에 사용합니다. 기본 설정의 Mega Go 지원 session에는 이미 6DoF와 5DoF를 지원하는 frame source가 구성되어 있습니다.
런타임에서 특정 수준의 frame source를 Mega가 지원하려면 두 가지 조건이 필요합니다.
- 필요한 frame source가 session의 선택 가능한 frame source 그룹에 포함되어 있어야 합니다.
- MegaGoTrackerFrameFilter.MinInputFrameLevel이 필요한 frame source의 CameraTransformType 수준보다 크거나 같아야 합니다.
예를 들어 기본 session에서 3DoF tracking을 지원하려면 다음이 필요합니다.
- ThreeDofCameraDeviceFrameSource를 session의 frame source 그룹에 추가합니다.
- MegaGoTrackerFrameFilter.MinInputFrameLevel를 ThreeDof로 변경합니다.
또 다른 예로 기본 session에서 5DoF tracking 지원을 제거하려면 다음이 필요합니다.
- InertialCameraDeviceFrameSource를 session의 frame source 그룹에서 제거합니다.
- MegaGoTrackerFrameFilter.MinInputFrameLevel를 SixDof로 변경합니다. (변경하지 않아도 5DoF frame source가 없으므로 5DoF는 사용되지 않습니다.)
조건을 만족하는 frame source가 없으면 session assemble이 실패합니다.
현재 시스템 상태 이해
기본 session 구성에서는 UI 메시지가 화면에 표시되며, 여기에 Mega Go 상태 정보가 포함됩니다.
tracker 상태는 Mega Go: 옆에 표시되며, 예를 들어 Tracking 또는 VerifyingTrial이 표시됩니다. 감지와 tracking 중에는 아래에 위치 업데이트도 표시됩니다.
![]()
현재 로드된 block의 tracking 상태는 Mega Go: 아래에 Block (<trackingStatus>): <name> (<id>) 형식으로 표시됩니다. <name>은 block 이름이고 <id>는 block ID입니다. trackingStatus는 Tracking 또는 NotTracking일 수 있으며, 각각 현재 block이 추적 중인지 여부를 나타냅니다.

MegaGoTrackerFrameFilter.Status 속성을 사용하면 현재 상태를 얻어 tracker의 동작 상황을 파악할 수 있습니다. 오류 상태가 발생하면 MegaGoTrackerFrameFilter.Error를 통해 오류 상태를 얻고 적절히 처리할 수 있습니다.
다음 코드는 이러한 속성을 사용하는 방법과, 앱이 주의해야 하는 일반적인 비정상 상태를 처리하는 방법을 보여줍니다.
void HandleTrackerStatus()
{
if (tracker.Status == MegaGoTrackerStatus.Error)
{
if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
{
// 로컬 검증에 실패했습니다. data가 만료되었거나 무효화되었는지 확인하는 것이 좋습니다(테스트 버전을 정식 버전으로 전환하면 테스트 데이터는 무효화됩니다).
}
else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
{
// 로컬 검증에 실패했습니다. target 파일이 완전한지 확인하는 것이 좋습니다.
}
else
{
// 기타 오류.
}
}
else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
{
// 평가판 target을 검증 중입니다. 검증이 오래 완료되지 않으면 네트워크 연결을 확인하는 것이 좋습니다.
}
else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
{
// VIO 입력을 초기화하는 중입니다. 초기화가 오래 완료되지 않으면 사용자에게 사용 방법 최적화를 안내하는 것이 좋습니다.
// 예: "카메라를 비스듬히 앞쪽으로 향하게 하고, 장치를 든 채 몸을 좌우로 크게 5번 움직여 보세요."
}
}
MegaGoTrackerFrameFilter.LocalizationRespond 이벤트를 사용하면 위치 업데이트를 가져올 수 있습니다.
일시 중지 및 계속
tracking을 일시 중지하려면 MegaGoTrackerFrameFilter.enabled를 false로 설정합니다.
기본적으로 tracking을 일시 중지한 뒤에는 모든 block 노드 아래의 내용이 숨겨집니다.
관련 항목
- Mega Go용 AR Session 모범 사례는 Mega Go에 적합한 AR Session을 만들고 설정하는 방법을 소개합니다.
- Mega Go tracking target 추가는 Mega Go tracking target block을 추가하는 방법과 Unity Editor에서 block 모델을 로드해 개발을 돕는 방법을 소개합니다.
- frame source 그룹 추가는 session의 frame source 그룹을 수정하는 방법을 소개합니다.
- session 실행 결과 얻기는 session 컴포넌트의 tracking 결과를 얻는 방법을 소개합니다.
- UI 메시지는 UI 메시지를 사용해 session 상태를 표시하는 방법을 소개합니다.