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

XR プロバイダーの作成

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

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

ファイルレイアウト

ネイティブプラグインは、UnitySubsystemsManifest.json に関連するサブフォルダーに保存されている必要があります。プロバイダーがパッケージに含まれていない場合、Unity は Assets フォルダーの 1 階層までにあるUnitySubsystemsManifest.json ファイルのみを検索します。

UnitySubsystemsManifest.json

このマニフェストには、プロバイダーが提供するサブシステムやプラグイン名など、プロバイダーに関する情報が含まれています。

For more information, see the UnitySubsystemsManifest.json page.

プロバイダープラグインの作成

ターゲットプラットフォーム用のネイティブプラグインを作成する方法については、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);

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

Note: The parameters passed to RegisterLifecycleProvider must match the name and id fields in your manifest file.

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

For more information about loading your provider in Unity, see the Runtime discovery and activation of subsystems page.

Unity XR SDK
UnitySubsystemsManifest.json