カメラ設定プロバイダーの作成

カメラ システムは、プラットフォーム固有のカメラ構成のサポートを提供するための拡張可能なシステムです。 新しいカメラ構成のサポートを追加するために、カスタムの設定プロバイダーが必要な場合があります。

Note

この例で使用する完全なソース コードは、MRTK/Providers/UnityAR フォルダーにあります。

名前空間とフォルダー構造

データ プロバイダーは、次の 2 つの方法のいずれかで配布されます。

  1. サード パーティのアドオン
  2. Microsoft Mixed Reality Toolkit の一部

MRTK への新しいデータ プロバイダーの送信の承認プロセスはケースごとに異なり、最初の提案時に伝えられます。 提案は、新しい [機能のリクエスト] タイプの問題を作成することによって送信できます。

サード パーティのアドオン

Namespace

名前が競合する可能性を低減するために、データ プロバイダーには名前空間が必要です。 名前空間には次のコンポーネントを含めることをお勧めします。

  • アドオンの開発元の企業名
  • Feature area (機能領域)

たとえば、Contoso 社によって作成および出荷されたカメラ設定プロバイダーは "Contoso.MixedReality.Toolkit.Camera" になります。

フォルダー構造

次の図に示すように、データ プロバイダーのソース コードをフォルダー階層で整理することをお勧めします。

Example folder structure

ContosoCamera フォルダーには、データ プロバイダーの実装が含まれており、Editor フォルダーには、インスペクター (およびその他の Unity エディター固有のコード) が含まれており、Profiles フォルダーには、事前に作成されたプロファイルのスクリプト実行可能なオブジェクトが 1 つ以上含まれています。

MRTK 申請

Namespace

カメラ設定プロバイダーを Mixed Reality Toolkit リポジトリに送信する場合、名前空間は Microsoft.MixedReality.Toolkit で始める必要があります (例: Microsoft.MixedReality.Toolkit.CameraSystem)。

フォルダー構造

すべてのコードは MRTK/Providers 配下のフォルダー (例: MRTK/Providers/UnityAR) に配置する必要があります。

カメラ設定オブジェクトの定義

カメラ設定プロバイダーを作成する最初の手順は、そのプロバイダーがアプリケーションに提供するデータの種類 (例: メッシュ、平面など) を決定することです。

すべての空間データ オブジェクトは IMixedRealityCameraSettingsProvider インターフェイスを実装する必要があります。

設定プロバイダーの実装

インターフェイスと基底クラス継承のどちらかまたは両方を指定する

すべてのカメラ設定プロバイダーで、カメラ システムに必要な最小限の機能を指定する IMixedRealityCameraSettingsProvider インターフェイスを実装する必要があります。 MRTK Foundation には、必須機能の既定の実装を提供する BaseCameraSettingsProvider クラスが含まれています。

namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    public class UnityARCameraSettings : BaseCameraSettingsProvider
    { }
}

MixedRealityDataProvider 属性の適用

カメラ設定プロバイダーを作成するための重要な手順は、MixedRealityDataProvider 属性をクラスに適用することです。 この手順では、データ プロバイダーの既定のプロファイルとプラットフォーム (カメラ設定プロファイルで選択されている場合) と、名前、フォルダー パスなどを設定できます。

    [MixedRealityDataProvider(
        typeof(IMixedRealityCameraSystem),
        SupportedPlatforms.Android | SupportedPlatforms.IOS,
        "Unity AR Foundation Camera Settings",
        "UnityAR/Profiles/DefaultUnityARCameraSettingsProfile.asset",
        "MixedRealityToolkit.Providers")]
    public class UnityARCameraSettings : BaseCameraSettingsProvider
    { }

IMixedRealityDataProvider のメソッドの実装

クラスを定義したら、次の手順として、IMixedRealityDataProvider インターフェイスの実装を提供します。

Note

BaseDataProvider クラスは、BaseService クラスを介して、IMixedRealityDataProvider メソッドの空の実装を提供します。 これらのメソッドの詳細は、一般にデータ プロバイダー固有です。

データ プロバイダーで実装する必要があるメソッドを次に示します。

  • Destroy()
  • Disable()
  • Enable()
  • Initialize()
  • Reset()
  • Update()

Note

すべての設定プロバイダーに、これらのメソッドすべての実装が必要なわけではありません。 少なくとも Destroy()Initialize() は実装することを強くお勧めします。

データ プロバイダーのロジックを実装する

次の手順では、IMixedRealityCameraSettingsProvider を実装して設定プロバイダーのロジックを追加します。 通常、データ プロバイダーのこの部分はカメラ構成に固有です。

プロファイルとインスペクターを作成する

Mixed Reality Toolkit では、プロファイルを使用してデータ プロバイダーを構成します。

プロファイルの削除

プロファイルの内容は、開発者が選択できる構成オプションを反映している必要があります。 各インターフェイスで定義するユーザー構成可能プロパティも、プロファイルに含める必要があります。

using UnityEngine.SpatialTracking;

namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    [CreateAssetMenu(
        menuName = "Mixed Reality Toolkit/Profiles/Unity AR Camera Settings Profile",
        fileName = "UnityARCameraSettingsProfile",
        order = 100)]
    public class UnityARCameraSettingsProfile : BaseCameraSettingsProfile
    {
        [SerializeField]
        [Tooltip("The portion of the device (ex: color camera) from which to read the pose.")]
        private ArTrackedPose poseSource = TrackedPoseDriver.TrackedPose.ColorCamera;

        /// <summary>
        /// The portion of the device (ex: color camera) from which to read the pose.
        /// </summary>
        public ArTrackedPose PoseSource => poseSource;

        [SerializeField]
        [Tooltip("The type of tracking (position and/or rotation) to apply.")]
        private ArTrackingType trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;

        /// <summary>
        /// The type of tracking (position and/or rotation) to apply.
        /// </summary>
        public ArTrackingType TrackingType => trackingType;

        [SerializeField]
        [Tooltip("Specifies when (during Update and/or just before rendering) to update the tracking of the pose.")]
        private ArUpdateType updateType = TrackedPoseDriver.UpdateType.UpdateAndBeforeRender;

        /// <summary>
        /// Specifies when (during Update and/or just before rendering) to update the tracking of the pose.
        /// </summary>
        public ArUpdateType UpdateType => updateType;
    }
}

顧客が [作成]>[アセット]>[Mixed Reality Toolkit]>[プロファイル] メニューを使用してプロファイル インスタンスを作成できるようにするために、CreateAssetMenu 属性をプロファイル クラスに適用できます。

インスペクターを実装する

プロファイル インスペクターは、プロファイルの内容を構成および表示するためのユーザー インターフェイスです。 各プロファイル インスペクターで、BaseMixedRealityToolkitConfigurationProfileInspector クラスを拡張する必要があります。

CustomEditor 属性により、インスペクターが適用されるアセットの種類が Unity に通知されます。

namespace namespace Microsoft.MixedReality.Toolkit.Experimental.UnityAR
{
    [CustomEditor(typeof(UnityARCameraSettingsProfile))]
    public class UnityARCameraSettingsProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
    { }
}

アセンブリ定義を作成する

Mixed Reality Toolkit では、コンポーネント間の依存関係を指定するため、および Unity でのコンパイル時間の短縮を支援するために、アセンブリ定義 (.asmdef) ファイルが使用されます。

すべてのデータ プロバイダーとそのエディター コンポーネントに対してアセンブリ定義ファイルを作成することをお勧めします。

前の例のフォルダー構造を使用して、ContosoCamera データ プロバイダーに対して 2 つの .asmdef ファイルを用意します。

最初のアセンブリ定義は、データ プロバイダー用です。 この例では、ContosoCamera という名前で、例の ContosoCamera フォルダーに配置されます。 このアセンブリ定義では、Microsoft.MixedReality.Toolkit に対する依存関係と、これが依存する他のアセンブリを指定する必要があります。

ContosoCameraEditor アセンブリ定義では、プロファイル インスペクターとエディター固有のコードを指定します。 このファイルは、エディター コードのルート フォルダーに配置する必要があります。 この例では、このファイルは ContosoCamera\Editor フォルダーに配置されています。 このアセンブリ定義には、ContosoCamera アセンブリへの参照と以下を含めます。

  • Microsoft.MixedReality.Toolkit
  • Microsoft.MixedReality.Toolkit.Editor.Inspectors
  • Microsoft.MixedReality.Toolkit.Editor.Utilities

データ プロバイダーの登録

データ プロバイダーは、作成後、アプリケーションで使用するカメラ システムに登録できます。

Selecting the camera settings provider

パッケージ化と配布

サード パーティ コンポーネントとして配布されるデータ プロバイダーには、パッケージ化と配布に関する特定の詳細を含めますが、この詳細は開発者の裁量に任されます。 最も一般的な解決策は、.unitypackage を生成し、Unity Asset Store を通じて配布する方法です。

データ プロバイダーが Microsoft Mixed Reality Toolkit パッケージの一部として送信され、受理されると、Microsoft MRTK チームは、それを MRTK オファリングの一部としてパッケージ化し、配布します。

関連項目