Version: 2020.1
言語: 日本語
VR フレームタイミング
XR プロバイダーの作成

Unity XR SDK

Unity XR SDK は、Unity で動作する独自の XR プロバイダーを開発したいと考えている専門家ユーザーを対象としています。XR SDK をダウンロードするには、このページ でアクセスのためのサインアップが必要です。

XR SDK パッケージを使うと、複数のバックエンド (“プロバイダー” と呼ばれます) が、単一のエンジン機能 (“サブシステム” と呼ばれます) を Unity に実装することが可能になります。ユーザーアプリケーションは、ランタイムにプロバイダーを選択し有効にすることができます。

サブシステム

サブシステムは以下から構成されています。

  • 開発者向けの C# インターフェース
  • ダイナミックライブラリーを通して複数のバックエンド (プロバイダー) を実装するネイティブインターフェース。
  • C# インターフェース、ネイティブインターフェース、およびエンジンの残りの部分との通信を処理する共通エンジンコード

サブシステム図

サブシステム記述子

サブシステム記述子は、サブシステムをロードまたは初期化する前に検査するサブシステムに関するメタデータです。これはマニフェストファイルから来ており、C# インターフェースを通してアクセスできます。Create メソッドは、サブシステムをアクティブ化して、そのインスタンスをユーザーのスクリプトに提供します。

詳細については、ランタイムディスカバリーとサブシステムのアクティベーション のページを参照してください。

サブシステムのインスタンス

サブシステム記述子で Create が呼び出されると、これによりサブシステムのインスタンスが作成されます。スクリプトコードは、サブシステムと通信するためにこれらのインスタンスと相互作用します。サブシステム自体には独自のライフサイクル (起動、停止、シャットダウン) があります。

プロバイダー

プロバイダーは、サブシステムのネイティブな実装です。1 つのサブシステムが複数のプロバイダーを持つことができます。サブシステムの中には、一度に複数のプロバイダーをアクティブにできるものもありますが、相互に排他的なものもあります。

プロバイダー図
プロバイダー図

プロバイダーは、Unity のネイティブプラグインインターフェース に準拠しており、その上にいくつかの追加のライフサイクルサポートが構築されています。エントリーポイントは、UnityPluginLoad メソッドです。ここから先は、プロバイダーが実装しようとするすべてのサブシステムに登録する必要があります。

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);

    // 他のサブシステムに登録...
}
VR フレームタイミング
XR プロバイダーの作成