Version: 2023.1
언어: 한국어
Unity XR SDK
UnitySubsystemsManifest.json

XR 공급자 생성

XR 공급자는 Unity 프로젝트의 일부이며, 최소한으로 매니페스트 파일과 하나 이상의 네이티브 플러그인으로 구성됩니다. 스크립트, 이미지 등 다른 에셋도 포함할 수 있습니다. 이러한 에셋은 에디터를 실행할 때 프로젝트에 있으면 Unity가 발견합니다.

참고: 공급자의 매니페스트 또는 에디터 네이티브 플러그인을 변경할 때마다 Unity를 다시 시작해야 합니다.

파일 레이아웃

네이티브 플러그인은 UnitySubsystemsManifest.json을 기준으로 하위 폴더에 있어야 합니다. 공급자가 패키지의 일부가 아니면 Unity는 Assets 폴더에서 한 단계 더 깊은 수준의 UnitySubsystemsManifest.json 파일을 찾습니다.

UnitySubsystemsManifest.json

이 매니페스트에는 제공되는 하위 시스템, 플러그인 이름 등과 같은 공급자에 대한 정보가 포함됩니다.

자세한 내용은 UnitySubsystemsManifest.json 페이지를 참조하십시오.

공급자 플러그인 빌드

타겟 플랫폼용 네이티브 플러그인을 빌드하는 방법은 Unity 네이티브 플러그인 인터페이스 문서를 참조하십시오. 동적 라이브러리를 Unity로 가져온 후 모든 옵션(예: 플러그인 설정의 타겟 플랫폼)이 올바른지 확인해야 합니다.

구현하려는 하위 시스템에 대한 라이프사이클 핸들러를 등록해야 합니다. 예를 들면 다음과 같습니다.

extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
  s_XrDisplay = unityInterfaces->Get<IUnityXRDisplayInterface>();
  UnityLifecycleProvider displayLifecycleHandler =
  {
    NULL, // This can be any object you want to pass as userData to the following functions
    &Lifecycle_Initialize,
    &Lifecycle_Start,
    &Lifecycle_Stop,
    &Lifecycle_Shutdown
  };
  s_XrDisplay->RegisterLifecycleProvider("Provider Plugin Name", "Display0", &displayLifecycleHandler);

  // Register with other subsystems
}

참고: RegisterLifecycleProvider에 전달한 파라미터는 반드시 매니페스트 파일name필드와 id필드에 일치해야 합니다.

나중에 Initialize 메서드를 호출하면 UnitySubsystemHandle을 가져오는 메서드를 호출하는 데 사용할 수 있는 인스턴스 핸들을 얻습니다. 다음은 그 예입니다.

/// Callback executed when a subsystem should initialize in preparation for becoming active.
static UnitySubsystemErrorCode UNITY_INTERFACE_API Lifecycle_Initialize(UnitySubsystemHandle handle, void* data)
{
  // Register for callbacks on the graphics thread.
  UnityXRDisplayGraphicsThreadProvider gfxThreadProvider = { NULL, NULL, &GfxThread_WaitForNextFrameDesc, NULL };
  s_XrDisplay->RegisterProviderForGraphicsThread(handle, &gfxThreadProvider);

  return kUnitySubsystemErrorCodeSuccess;
}

SDK 패키지에는 샘플 플러그인을 빌드하는 예제 프로젝트가 포함되어 있습니다.

Unity에서 로드

Unity의 공급자를 로드하는 데 대한 자세한 내용은 하위 시스템의 런타임 발견 및 활성화 페이지를 참조하십시오.

Unity XR SDK
UnitySubsystemsManifest.json