Criar um fornecedor de definições de câmara — MRTK2

O sistema câmara é um sistema extensível para fornecer suporte para configurações de câmaras específicas da plataforma. Para adicionar suporte para uma nova configuração da câmara, poderá ser necessário um fornecedor de definições personalizadas.

Nota

O código fonte completo utilizado neste exemplo pode ser encontrado na pasta MRTK/Providers/UnityAR .

Espaço de nomes e estrutura de pastas

Os fornecedores de dados podem ser distribuídos de uma de duas formas:

  1. Suplementos de terceiros
  2. Parte do Microsoft Mixed Reality Toolkit

O processo de aprovação das submissões de novos fornecedores de dados ao MRTK variará caso a caso e será comunicado no momento da proposta inicial. As propostas podem ser submetidas ao criar um novo problema de tipo de Pedido de Funcionalidade.

Suplementos de terceiros

Espaço de Nomes

Os fornecedores de dados têm de ter um espaço de nomes para mitigar potenciais colisões de nomes. Recomenda-se que o espaço de nomes inclua os seguintes componentes.

  • Nome da empresa que produz o suplemento
  • Área de funcionalidades

Por exemplo, um fornecedor de definições de câmara criado e enviado pela empresa Contoso pode ser "Contoso.MixedReality.Toolkit.Camera".

Estrutura de pastas

Recomenda-se que o código fonte dos fornecedores de dados seja apresentado numa hierarquia de pastas, conforme mostrado na imagem seguinte.

Exemplo de estrutura de pasta

Quando a pasta ContosoCamera contém a implementação do fornecedor de dados, a pasta Editor contém o inspector (e qualquer outro código específico do editor do Unity) e a pasta Perfis contém um ou mais objetos scriptable de perfil pré-criados.

Submissão do MRTK

Espaço de Nomes

Se um fornecedor de definições de câmara estiver a ser submetido para o repositório do Mixed Reality Toolkit, o espaço de nomes tem de começar por Microsoft.MixedReality.Toolkit (ex: Microsoft.MixedReality.Toolkit.CameraSystem).

Estrutura de pastas

Todo o código tem de estar localizado numa pasta abaixo de MRTK/Providers (por exemplo, MRTK/Providers/UnityAR).

Definir o objeto de definições da câmara

O primeiro passo para criar um fornecedor de definições de câmara é determinar o tipo de dados (por exemplo: malhas ou planos) que irá fornecer às aplicações.

Todos os objetos de dados espaciais têm de implementar a IMixedRealityCameraSettingsProvider interface.

Implementar o fornecedor de definições

Especificar a herança da interface e/ou da classe base

Todos os fornecedores de definições de câmara têm de implementar a IMixedRealityCameraSettingsProvider interface, que especifica a funcionalidade mínima exigida pelo sistema de câmaras. A base MRTK inclui a BaseCameraSettingsProvider classe que fornece uma implementação predefinida da funcionalidade necessária.

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

Aplicar o atributo MixedRealityDataProvider

Um passo fundamental na criação de um fornecedor de definições de câmara é aplicar o MixedRealityDataProvider atributo à classe. Este passo permite definir o perfil e as plataformas predefinidos para o fornecedor de dados, quando selecionados no perfil do Sistema de Câmara, bem como o nome, o caminho da pasta e muito mais.

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

Implementar os métodos IMixedRealityDataProvider

Assim que a classe tiver sido definida, o próximo passo é fornecer a implementação da IMixedRealityDataProvider interface.

Nota

A BaseDataProvider classe, através da BaseService classe, fornece implementações vazias para IMixedRealityDataProvider métodos. Os detalhes destes métodos são geralmente específicos do fornecedor de dados.

Os métodos que devem ser implementados pelo fornecedor de dados são:

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

Nota

Nem todos os fornecedores de definições exigirão implementações para todos estes métodos. É altamente recomendado que Destroy() e Initialize() seja implementado no mínimo.

Implementar a lógica do fornecedor de dados

O próximo passo é adicionar a lógica do fornecedor de definições ao implementar IMixedRealityCameraSettingsProvider. Normalmente, esta parte do fornecedor de dados será específica da configuração da câmara.

Criar o perfil e o inspetor

No Mixed Reality Toolkit, os fornecedores de dados são configurados com perfis.

Definir o perfil

Os conteúdos do perfil devem espelhar as opções de configuração selecionáveis do programador. Todas as propriedades configuráveis do utilizador definidas em cada interface também devem estar contidas no 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;
    }
}

O CreateAssetMenu atributo pode ser aplicado à classe de perfil para permitir que os clientes criem uma instância de perfil com o menu Criar>Recursos> Mixed RealityPerfis do Toolkit>.

Implementar o inspetor

Os inspetores de perfis são a interface de utilizador para configurar e visualizar conteúdos de perfil. Cada inspetor de perfis deve expandir a BaseMixedRealityToolkitConfigurationProfileInspector classe.

O CustomEditor atributo informa o Unity do tipo de recurso a que o inspector se aplica.

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

Criar definições de assemblagem

Mixed Reality Toolkit utiliza ficheiros de definição de assemblagem (.asmdef) para especificar dependências entre componentes, bem como para ajudar o Unity a reduzir o tempo de compilação.

Recomenda-se que os ficheiros de definição de assemblagem sejam criados para todos os fornecedores de dados e respetivos componentes de editor.

Ao utilizar a estrutura de pastas no exemplo anterior, haveria dois ficheiros .asmdef para o fornecedor de dados ContosoCamera.

A primeira definição de assemblagem destina-se ao fornecedor de dados. Neste exemplo, será denominado ContosoCamera e estará localizado na pasta ContosoCamera do exemplo. Esta definição de assemblagem tem de especificar uma dependência em Microsoft.MixedReality.Toolkit e em quaisquer outras assemblagens de que dependa.

A definição de assemblagem ContosoCameraEditor especificará o inspetor de perfis e qualquer código específico do editor. Este ficheiro tem de estar localizado na pasta raiz do código do editor. Neste exemplo, o ficheiro estará localizado na pasta ContosoCamera\Editor . Esta definição de assemblagem irá conter uma referência à assemblagem ContosoCamera, bem como:

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

Registar o fornecedor de dados

Depois de criado, o fornecedor de dados pode ser registado no sistema câmara para ser utilizado na aplicação.

Selecionar o fornecedor de definições da câmara

Empacotamento e distribuição

Os fornecedores de dados distribuídos como componentes de terceiros têm os detalhes específicos de empacotamento e distribuição deixados à preferência do programador. Provavelmente, a solução mais comum será gerar um .unitypackage e distribuir através do Unity Asset Store.

Se um fornecedor de dados for submetido e aceite como parte do pacote microsoft Mixed Reality Toolkit, a equipa do Microsoft MRTK irá empacotá-lo e distribuí-lo como parte das ofertas do MRTK.

Ver também