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

추가 정보