Unity의 손실 추적
디바이스가 전 세계에서 자신을 찾을 수 없는 경우 앱은 "손실 추적"을 경험합니다. 기본적으로 Unity는 업데이트 루프를 일시 중지하고 추적이 손실될 때마다 사용자에게 시작 이미지를 표시합니다. 추적이 다시 완료되면 시작 이미지가 사라지고 업데이트 루프가 계속됩니다.
또는 사용자가 설정을 옵트아웃하여 이 전환을 수동으로 처리할 수 있습니다. 모든 콘텐츠는 아무 작업도 수행하지 않으면 손실 추적 중에 신체가 잠긴 것처럼 보입니다.
기본 처리
업데이트 루프와 모든 메시지 및 이벤트는 기본적으로 손실 추적 기간 동안 중지됩니다. 동시에 이미지가 사용자에게 표시됩니다. Edit-Settings-Player>>로 이동하고, 시작 이미지를 클릭하고, 홀로그램 추적 손실 이미지를 설정하여 이 이미지를 사용자 지정할 수 있습니다.
수동 처리
추적 손실을 수동으로 처리하려면 프로젝트 설정>편집>플레이어>유니버설 Windows 플랫폼 설정 탭>시작 이미지>Windows 홀로그램으로 이동하여 "추적 손실 일시 중지 및 이미지 표시"의 선택을 취소해야 합니다. 그 후에는 아래에 지정된 API를 사용하여 변경 내용 추적을 처리해야 합니다.
네임스페이스: UnityEngine.XR.WSA
형식: WorldManager
- World Manager는 손실/획득 추적을 검색하는 이벤트(WorldManager.OnPositionalLocatorStateChanged) 및 현재 상태를 쿼리하는 속성(WorldManager.state)을 노출합니다.
- 추적 상태가 활성 상태가 아닌 경우 사용자가 번역하는 경우에도 카메라가 가상 세계에서 변환되지 않습니다. 개체는 더 이상 물리적 위치에 해당하지 않으며 모두 본문이 잠긴 것처럼 표시됩니다.
변경 내용 추적을 직접 처리할 때 각 프레임마다 상태 속성을 폴링하거나 OnPositionalLocatorStateChanged 이벤트를 처리해야 합니다.
폴링
가장 중요한 상태는 PositionalLocatorState.Active입니다. 즉, 추적이 완벽하게 작동합니다. 다른 모든 상태는 주 카메라에 대한 회전 델타만 발생합니다. 예시:
void Update()
{
switch (UnityEngine.XR.WSA.WorldManager.state)
{
case PositionalLocatorState.Active:
// handle active
break;
case PositionalLocatorState.Activating:
case PositionalLocatorState.Inhibited:
case PositionalLocatorState.OrientationOnly:
case PositionalLocatorState.Unavailable:
default:
// only rotational information is available
break;
}
}
OnPositionalLocatorStateChanged 이벤트 처리
보다 편리하게, OnPositionalLocatorStateChanged를 구독하여 전환을 처리할 수도 있습니다.
void Start()
{
UnityEngine.XR.WSA.WorldManager.OnPositionalLocatorStateChanged += WorldManager_OnPositionalLocatorStateChanged;
}
private void WorldManager_OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
{
if (newState == PositionalLocatorState.Active)
{
// Handle becoming active
}
else
{
// Handle becoming rotational only
}
}