Создание поставщика параметров камеры — MRTK2

Система Камера — это расширяемая система для поддержки конфигураций конкретной платформы камеры. Чтобы добавить поддержку новой конфигурации камеры, может потребоваться поставщик настраиваемых параметров.

Примечание

Полный исходный код, используемый в этом примере, можно найти в папке MRTK/Providers/UnityAR .

Пространство имен и структура папок

Поставщики данных могут распространяться одним из двух способов:

  1. Сторонние надстройки
  2. Часть набора средств Microsoft Смешанная реальность

Процесс утверждения для отправки новых поставщиков данных в MRTK будет зависеть от конкретного случая и будет передаваться во время первоначального предложения. Предложения можно отправить, создав новую проблему типа запроса компонентов.

Сторонние надстройки

Пространство имен

Поставщики данных должны иметь пространство имен для устранения потенциальных конфликтов имен. Рекомендуется, чтобы пространство имен включает следующие компоненты.

  • Название компании, создающей надстройку
  • Область применения компонента

Например, поставщик параметров камеры, созданный и отправленный компанией Contoso, может быть contoso.MixedReality.Toolkit.Камера.

Структура папок

Рекомендуется разместить исходный код для поставщиков данных в иерархии папок, как показано на следующем рисунке.

Example folder structure

Если папка ContosoCamera содержит реализацию поставщика данных, папка Editor содержит инспектор (и любой другой код редактора Unity), а папка Profiles содержит один или несколько предварительно созданных объектов, предназначенных для сценариев профиля.

Отправка MRTK

Пространство имен

Если поставщик параметров камеры отправляется в репозиторий Смешанная реальность 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. Эта часть поставщика данных обычно зависит от конфигурации камеры.

Создание профиля и инспектора

В наборе средств Смешанная реальность поставщики данных настраиваются с помощью профилей.

Определение профиля

Содержимое профиля должно зеркально отражать параметры конфигурации, доступные для выбора разработчиком. Все настраиваемые пользователем свойства, определенные в каждом интерфейсе, также должны содержаться в профиле.

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 можно применить к классу профиля, чтобы пользователи могли создавать экземпляр профиля с помощью меню "Создать>ресурсы>Смешанная реальность Набор средств>".

Реализация инспектора

Инспекторы профилей — это пользовательский интерфейс для настройки и просмотра содержимого профиля. Каждый инспектор профилей BaseMixedRealityToolkitConfigurationProfileInspector должен расширять класс.

Атрибут CustomEditor сообщает Unity о типе ресурса, к которому применяется инспектор.

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

Создание определений сборок

Набор средств Смешанная реальность использует файлы определения сборки (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

Регистрация поставщика данных

После создания поставщик данных можно зарегистрировать в системе Камера для использования в приложении.

Selecting the camera settings provider

Упаковка и распространение

Поставщики данных, распределенные как сторонние компоненты, имеют конкретные сведения о упаковке и распространении, оставленные в предпочтениях разработчика. Скорее всего, наиболее распространенным решением будет создание пакета unitypackage и распространение через хранилище активов Unity.

Если поставщик данных отправляется и принимается в составе пакета Microsoft Смешанная реальность Toolkit, команда Microsoft MRTK упаковает и распространит его в рамках предложений MRTK.

См. также статью