Version: 2020.3
言語: 日本語
Unity XR SDK
UnitySubsystemsManifest.json

XR プロバイダーの作成

XR プロバイダーは、Unity プロジェクトの一部であり、最低限、マニフェストファイルと 1 つ以上のネイティブプラグインで構成されています。また、スクリプトや画像などの他のアセットを加えることもできます。エディターを起動したときにこれらがプロジェクト内にあれば、Unity に検出されます。

ノート: プロバイダーのマニフェストやエディターのネイティブプラグインを変更した場合は、Unity を再起動する必要があります。

ファイルレイアウト

ネイティブプラグインは、UnitySubsystemsManifest.json に関連するサブフォルダーに保存されている必要があります。プロバイダーがパッケージに含まれていない場合、Unity は Assets フォルダーの 1 階層までにある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, // これは、 userData として以下の関数に渡される任意のオブジェクトです
    &Lifecycle_Initialize,
    &Lifecycle_Start,
    &Lifecycle_Stop,
    &Lifecycle_Shutdown
  };
  s_XrDisplay->RegisterLifecycleProvider("Provider Plugin Name", "Display0", &displayLifecycleHandler);

  // 他のサブシステムに登録
}

ノート: RegisterLifecycleProvider に渡されるパラメーターは、マニフェストファイルnameid のフィールドと一致する必要があります。

後に、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 のロード

Unity でのプロバイダーのロードに関する詳細は、ランタイムディスカバリーとサブシステムのアクティベーション ページを参照してください。

Unity XR SDK
UnitySubsystemsManifest.json