XR プロバイダーは、Unity プロジェクトの一部であり、最低限、マニフェストファイルと 1 つ以上のネイティブプラグインで構成されています。また、スクリプトや画像などの他のアセットを加えることもできます。エディターを起動したときにこれらがプロジェクト内にあれば、Unity に検出されます。
ノート: プロバイダーのマニフェストやエディターのネイティブプラグインを変更した場合は、Unity を再起動する必要があります。
ネイティブプラグインは、UnitySubsystemsManifest.json
に関連するサブフォルダーに保存されている必要があります。プロバイダーがパッケージに含まれていない場合、Unity は Assets
フォルダーの 1 階層までにある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, // これは、 userData として以下の関数に渡される任意のオブジェクトです
&Lifecycle_Initialize,
&Lifecycle_Start,
&Lifecycle_Stop,
&Lifecycle_Shutdown
};
s_XrDisplay->RegisterLifecycleProvider("Provider Plugin Name", "Display0", &displayLifecycleHandler);
// 他のサブシステムに登録
}
ノート: RegisterLifecycleProvider
に渡されるパラメーターは、マニフェストファイル の name
および id
のフィールドと一致する必要があります。
後に、Initialize
メソッドを呼び出すと、UnitySubsystemHandle
を取るメソッドを呼び出すのに使用するインスタンスハンドルを取得します。以下はその例です。
/// サブシステムがアクティブになる準備として初期化する必要があるときに実行されるコールバック。
static UnitySubsystemErrorCode UNITY_INTERFACE_API Lifecycle_Initialize(UnitySubsystemHandle handle, void* data)
{
// グラフィックスレッドでコールバックに登録します。
UnityXRDisplayGraphicsThreadProvider gfxThreadProvider = { NULL, NULL, &GfxThread_WaitForNextFrameDesc, NULL };
s_XrDisplay->RegisterProviderForGraphicsThread(handle, &gfxThreadProvider);
return kUnitySubsystemErrorCodeSuccess;
}
SDK パッケージには、プラグインのサンプルを作成するサンプルプロジェクトが含まれています。
Unity でのプロバイダーのロードに関する詳細については、サブシステムのランタイム検索とアクティベーション ページを参照してください。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.