建立相機設定提供者 — MRTK2

相機系統是一種可延伸的系統,可提供平臺特定相機設定的支援。 若要新增對新相機設定的支援,可能需要自訂設定提供者。

注意

此範例中使用的完整原始程式碼可以在 MRTK/Providers/UnityAR 資料夾中找到。

命名空間和資料夾結構

資料提供者可以透過下列兩種方式之一散發:

  1. 協力廠商附加元件
  2. Microsoft Mixed Reality工具組的一部分

將新資料提供者提交至 MRTK 的核准程式會依案例而有所不同,並且會在初始提案時進行通訊。 您可以藉由建立新的 功能要求 類型問題來提交提案。

協力廠商附加元件

Namespace

資料提供者必須有命名空間,才能減輕潛在的名稱衝突。 建議命名空間包含下列元件。

  • 產生附加元件的公司名稱
  • 功能區域

例如,Contoso 公司所建立和運送的相機設定提供者可能是「Contoso.MixedReality.Toolkit.Camera」。

資料夾結構

建議將資料提供者的原始程式碼配置在資料夾階層中,如下圖所示。

範例資料夾結構

其中 ContosoCamera 資料夾包含資料提供者的實作, Editor 資料夾包含 inspector (和任何其他 Unity 編輯器特定程式碼) ,而 Profiles 資料夾包含一或多個預先設定的設定檔可編寫腳本物件。

MRTK 提交

Namespace

如果將相機設定提供者提交至Mixed Reality Toolkit 存放庫,命名空間必須以 Microsoft.MixedReality.Toolkit (例如:Microsoft.MixedReality.Toolkit.CameraSystem) 開頭。

資料夾結構

所有程式碼都必須位於 MRTK/Providers 下的資料夾 (,例如:MRTK/Providers/UnityAR) 。

定義相機設定物件

建立相機設定提供者的第一個步驟是判斷資料類型 (,例如:網格或平面) 提供給應用程式。

所有空間資料物件都必須實作 IMixedRealityCameraSettingsProvider 介面。

實作設定提供者

指定介面和/或基類繼承

所有相機設定提供者都必須實 IMixedRealityCameraSettingsProvider 作 介面,以指定相機系統所需的最低功能。 MRTK 基礎包含 類別, 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

注意

類別 BaseDataProvider 透過 BaseService 類別提供方法的空白實作 IMixedRealityDataProvider 。 這些方法的詳細資料通常是特定的資料提供者。

資料提供者應該實作的方法如下:

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

注意

並非所有設定提供者都需要所有這些方法的實作。 強烈建議 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;
    }
}

屬性 CreateAssetMenu 可以套用至設定檔類別,讓客戶能夠使用 [建立>資產>Mixed Reality工具> 組設定檔] 功能表來建立設定檔實例。

實作偵測器

設定檔偵測器是用來設定和檢視設定檔內容的使用者介面。 每個設定檔偵測器都應該擴充 BaseMixedRealityToolkitConfigurationProfileInspector 類別。

屬性 CustomEditor 會通知 Unity 要套用的資產類型。

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

() 建立元件定義

Mixed Reality Toolkit 會使用元件定義 (.asmdef) 檔案來指定元件之間的相依性,以及協助 Unity 減少編譯時間。

建議針對所有資料提供者及其編輯器元件建立元件定義檔案。

使用先前範例中的 資料夾結構 時,ContosoCamera 資料提供者會有兩個 .asmdef 檔案。

第一個元件定義是用於資料提供者。 在此範例中,它會稱為 ContosoCamera,而且會位於範例的 ContosoCamera 資料夾中。 此元件定義必須指定 Microsoft.MixedReality.Toolkit 的相依性,以及它相依的任何其他元件。

ContosoCameraEditor 元件定義會指定設定檔偵測器和任何編輯器特定的程式碼。 這個檔案必須位於編輯器程式碼的根資料夾中。 在此範例中,檔案會位於 ContosoCamera\Editor 資料夾中。 此元件定義將包含 ContosoCamera 元件的參考,以及:

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

註冊資料提供者

建立之後,資料提供者即可向要用於應用程式的相機系統註冊。

選取相機設定提供者

封裝和散發

以協力廠商元件的形式散發的資料提供者,將封裝和散發的特定詳細資料保留給開發人員的喜好設定。 可能,最常見的解決方案是產生 .unitypackage,並透過 Unity 資產存放區散發。

如果提交資料提供者並接受為 Microsoft Mixed Reality Toolkit 套件的一部分,Microsoft MRTK 小組將會封裝並散發為 MRTK 供應專案的一部分。

另請參閱