Creación de un proveedor de configuración de cámara: MRTK2

El sistema Camera es un sistema extensible para proporcionar compatibilidad con configuraciones de cámara específicas de la plataforma. Para agregar compatibilidad con una nueva configuración de cámara, es posible que se requiera un proveedor de configuración personalizado.

Nota

El código fuente completo que se usa en este ejemplo se puede encontrar en la carpeta MRTK/Providers/UnityAR .

Espacio de nombres y estructura de carpetas

Los proveedores de datos se pueden distribuir de una de estas dos maneras:

  1. Complementos de terceros
  2. Parte de Microsoft Mixed Reality Toolkit

El proceso de aprobación de envíos de nuevos proveedores de datos a MRTK variará según el caso y se comunicará en el momento de la propuesta inicial. Las propuestas se pueden enviar mediante la creación de un nuevo problema de tipo de solicitud de característica.

Complementos de terceros

Espacio de nombres

Los proveedores de datos deben tener un espacio de nombres para mitigar posibles colisiones de nombres. Se recomienda que el espacio de nombres incluya los siguientes componentes.

  • Nombre de la empresa que genera el complemento
  • Área de función

Por ejemplo, un proveedor de configuración de cámara creado y enviado por la empresa Contoso puede ser "Contoso.MixedReality.Toolkit.Camera".

Estructura de carpetas

Se recomienda que el código fuente de los proveedores de datos se incluya en una jerarquía de carpetas, como se muestra en la imagen siguiente.

Ejemplo de estructura de carpetas

Donde la carpeta ContosoCamera contiene la implementación del proveedor de datos, la carpeta Editor contiene el inspector (y cualquier otro código específico del editor de Unity) y la carpeta Profiles contiene uno o varios objetos de scriptables de perfil creados previamente.

Envío de MRTK

Espacio de nombres

Si se envía un proveedor de configuración de cámara al repositorio Mixed Reality Toolkit, el espacio de nombres debe comenzar con Microsoft.MixedReality.Toolkit (por ejemplo: Microsoft.MixedReality.Toolkit.CameraSystem).

Estructura de carpetas

Todo el código debe encontrarse en una carpeta debajo de MRTK/Providers (por ejemplo, MRTK/Providers/UnityAR).

Definición del objeto de configuración de la cámara

El primer paso para crear un proveedor de configuración de cámara es determinar el tipo de datos (por ejemplo, mallas o planos) que proporcionará a las aplicaciones.

Todos los objetos de datos espaciales deben implementar la IMixedRealityCameraSettingsProvider interfaz .

Implementación del proveedor de configuración

Especificar la herencia de clases base o interfaz

Todos los proveedores de configuración de cámara deben implementar la IMixedRealityCameraSettingsProvider interfaz , que especifica la funcionalidad mínima requerida por el sistema de cámara. La base MRTK incluye la BaseCameraSettingsProvider clase que proporciona una implementación predeterminada de la funcionalidad necesaria.

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

Aplicación del atributo MixedRealityDataProvider

Un paso clave para crear un proveedor de configuración de cámara es aplicar el MixedRealityDataProvider atributo a la clase . Este paso permite establecer el perfil y las plataformas predeterminados para el proveedor de datos, cuando se seleccionan en el perfil del sistema de cámara, así como el nombre, la ruta de acceso de carpeta, etc.

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

Implementación de los métodos IMixedRealityDataProvider

Una vez definida la clase, el siguiente paso es proporcionar la implementación de la IMixedRealityDataProvider interfaz.

Nota

La BaseDataProvider clase , a través de la BaseService clase , proporciona implementaciones vacías para IMixedRealityDataProvider los métodos. Los detalles de estos métodos suelen ser específicos del proveedor de datos.

Los métodos que debe implementar el proveedor de datos son:

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

Nota

No todos los proveedores de configuración requerirán implementaciones para todos estos métodos. Se recomienda encarecidamente que Destroy() y Initialize() se implemente como mínimo.

Implementación de la lógica del proveedor de datos

El siguiente paso consiste en agregar la lógica del proveedor de configuración mediante la implementación IMixedRealityCameraSettingsProviderde . Esta parte del proveedor de datos normalmente será específica de la configuración de la cámara.

Creación del perfil y el inspector

En Mixed Reality Toolkit, los proveedores de datos se configuran mediante perfiles.

Definición del perfil

El contenido del perfil debe reflejar las opciones de configuración seleccionables del desarrollador. Las propiedades configurables por el usuario definidas en cada interfaz también deben estar contenidas en el perfil.

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

El CreateAssetMenu atributo se puede aplicar a la clase de perfil para permitir a los clientes crear una instancia de perfil mediante el menú Crear>recursos>Mixed Reality Perfiles del kit de herramientas>.

Implementación del inspector

Los inspectores de perfil son la interfaz de usuario para configurar y ver el contenido del perfil. Cada inspector de perfil debe extender la BaseMixedRealityToolkitConfigurationProfileInspector clase .

El CustomEditor atributo informa a Unity del tipo de recurso al que se aplica el inspector.

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

Crear definiciones de ensamblado

Mixed Reality Toolkit usa archivos de definición de ensamblado (.asmdef) para especificar dependencias entre componentes, así como para ayudar a Unity a reducir el tiempo de compilación.

Se recomienda crear archivos de definición de ensamblado para todos los proveedores de datos y sus componentes del editor.

Con la estructura de carpetas del ejemplo anterior, habría dos archivos .asmdef para el proveedor de datos ContosoCamera.

La primera definición de ensamblado es para el proveedor de datos. En este ejemplo, se llamará ContosoCamera y se ubicará en la carpeta ContosoCamera del ejemplo. Esta definición de ensamblado debe especificar una dependencia de Microsoft.MixedReality.Toolkit y cualquier otro ensamblado en el que dependa.

La definición del ensamblado ContosoCameraEditor especificará el inspector de perfil y cualquier código específico del editor. Este archivo debe encontrarse en la carpeta raíz del código del editor. En este ejemplo, el archivo se ubicará en la carpeta ContosoCamera\Editor . Esta definición de ensamblado contendrá una referencia al ensamblado ContosoCamera, así como:

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

Registro del proveedor de datos

Una vez creado, el proveedor de datos se puede registrar con el sistema Camera que se usará en la aplicación.

Selección del proveedor de configuración de la cámara

Empaquetado y distribución

Los proveedores de datos que se distribuyen como componentes de terceros tienen los detalles específicos del empaquetado y la distribución que quedan a la preferencia del desarrollador. Probablemente, la solución más común será generar un archivo .unitypackage y distribuirlo a través del Almacén de recursos de Unity.

Si se envía y acepta un proveedor de datos como parte del paquete microsoft Mixed Reality Toolkit, el equipo de Microsoft MRTK empaquetará y lo distribuirá como parte de las ofertas de MRTK.

Consulte también