XR 공급자는 Unity 프로젝트의 일부이며, 최소한으로 매니페스트 파일과 하나 이상의 네이티브 플러그인으로 구성됩니다. 스크립트, 이미지 등 다른 에셋도 포함할 수 있습니다. 이러한 에셋은 에디터를 실행할 때 프로젝트에 있으면 Unity가 발견합니다.
참고: 공급자의 매니페스트 또는 에디터 네이티브 플러그인을 변경할 때마다 Unity를 다시 시작해야 합니다.
네이티브 플러그인은 UnitySubsystemsManifest.json
을 기준으로 하위 폴더에 있어야 합니다. 공급자가 패키지의 일부가 아니면 Unity는 Assets
폴더에서 한 단계 더 깊은 수준의 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에서 공급자를 로드하는 방법에 대한 자세한 내용은 하위 시스템의 런타임 발견 및 활성화 페이지를 참조하십시오.