Criando um provedor de configurações de câmera – MRTK2

O sistema camera é um sistema extensível para fornecer suporte para configurações de câmera específicas da plataforma. Para adicionar suporte para uma nova configuração de câmera, um provedor de configurações personalizadas pode ser necessário.

Observação

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

Namespace e estrutura de pasta

Os provedores de dados podem ser distribuídos de duas maneiras:

  1. Complementos de terceiros
  2. Parte do Microsoft Realidade Misturada Toolkit

O processo de aprovação para envios de novos provedores de dados ao MRTK variará caso a caso e será comunicado no momento da proposta inicial. As propostas podem ser enviadas criando um novo problema de tipo de Solicitação de Recurso.

Complementos de terceiros

Namespace

Os provedores de dados são necessários para ter um namespace para atenuar possíveis colisões de nome. É recomendável que o namespace inclua os seguintes componentes.

  • Nome da empresa que produz o complemento
  • Área do recurso

Por exemplo, um provedor de configurações de câmera criado e enviado pela empresa Contoso pode ser "Contoso.MixedReality.Toolkit.Camera".

Estrutura de pastas

É recomendável que o código-fonte para provedores de dados seja apresentado em uma hierarquia de pastas, conforme mostrado na imagem a seguir.

Estrutura de pasta de exemplo

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

Envio do MRTK

Namespace

Se um provedor de configurações de câmera estiver sendo enviado para o repositório Realidade Misturada Toolkit, o namespace deverá começar com Microsoft.MixedReality.Toolkit (ex: Microsoft.MixedReality.Toolkit.CameraSystem).

Estrutura de pastas

Todo o código deve estar localizado em uma pasta abaixo de MRTK/Provedores (ex: MRTK/Providers/UnityAR).

Definir o objeto de configurações da câmera

A primeira etapa na criação de um provedor de configurações de câmera é determinar o tipo de dados (ex: malhas ou planos) que ele fornecerá aos aplicativos.

Todos os objetos de dados espaciais devem implementar a IMixedRealityCameraSettingsProvider interface.

Implementar o provedor de configurações

Especificar interface e/ou herança de classe base

Todos os provedores de configurações de câmera devem implementar a IMixedRealityCameraSettingsProvider interface, que especifica a funcionalidade mínima exigida pelo sistema de câmera. A base mrtk inclui a BaseCameraSettingsProvider classe que fornece uma implementação padrão da funcionalidade necessária.

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

Aplicar o atributo MixedRealityDataProvider

Uma etapa fundamental na criação de um provedor de configurações de câmera é aplicar o MixedRealityDataProvider atributo à classe. Esta etapa permite definir o perfil padrão e as plataformas para o provedor de dados, quando selecionado no perfil do Sistema de Câmera, bem como nome, 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

Depois que a classe for definida, a próxima etapa será fornecer a implementação da IMixedRealityDataProvider interface.

Observação

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

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

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

Observação

Nem todos os provedores de configurações exigirão implementações para todos esses métodos. É altamente recomendável que Destroy() ele Initialize() seja implementado no mínimo.

Implementar a lógica do provedor de dados

A próxima etapa é adicionar a lógica do provedor de configurações implementando IMixedRealityCameraSettingsProvider. Essa parte do provedor de dados normalmente será específica da configuração da câmera.

Criar o perfil e o inspetor

Em Realidade Misturada Toolkit, os provedores de dados são configurados usando perfis.

Definir o perfil

O conteúdo do perfil deve espelhar as opções de configuração selecionáveis do desenvolvedor. Todas as propriedades configuráveis do usuário definidas em cada interface também devem estar contidas com o 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 usando o menu Criar>Ativos> Realidade MisturadaPerfis do Kit de Ferramentas>.

Implementar o inspetor

Inspetores de perfil são a interface do usuário para configurar e exibir conteúdos de perfil. Cada inspetor de perfil deve estender a BaseMixedRealityToolkitConfigurationProfileInspector classe.

O CustomEditor atributo informa ao Unity o tipo de ativo ao qual o inspetor se aplica.

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

Criar definições de assembly

Realidade Misturada Toolkit usa arquivos de definição de assembly (.asmdef) para especificar dependências entre componentes, bem como para auxiliar o Unity na redução do tempo de compilação.

É recomendável que os arquivos de definição de assembly sejam criados para todos os provedores de dados e seus componentes do editor.

Usando a estrutura de pastas no exemplo anterior, haveria dois arquivos .asmdef para o provedor de dados ContosoCamera.

A primeira definição de assembly é para o provedor de dados. Para este exemplo, ele será chamado contosoCamera e estará localizado na pasta ContosoCamera do exemplo. Essa definição de assembly deve especificar uma dependência em Microsoft.MixedReality.Toolkit e quaisquer outros assemblies dos quais ela depende.

A definição do assembly ContosoCameraEditor especificará o inspetor de perfil e qualquer código específico do editor. Esse arquivo deve estar localizado na pasta raiz do código do editor. Neste exemplo, o arquivo estará localizado na pasta ContosoCamera\Editor . Essa definição de assembly conterá uma referência ao assembly ContosoCamera, bem como:

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

Registrar o provedor de dados

Depois de criado, o provedor de dados pode ser registrado com o sistema Câmera a ser usado no aplicativo.

Selecionando o provedor de configurações da câmera

Empacotamento e distribuição

Os provedores de dados distribuídos como componentes de terceiros têm os detalhes específicos de empacotamento e distribuição deixados para a preferência do desenvolvedor. Provavelmente, a solução mais comum será gerar um .unitypackage e distribuir por meio do Unity Asset Store.

Se um provedor de dados for enviado e aceito como parte do pacote microsoft Realidade Misturada Toolkit, a equipe do Microsoft MRTK o empacotará e distribuirá como parte das ofertas do MRTK.

Confira também