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

O sistema câmera é 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 .

Estrutura de namespace e 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 precisam ter um namespace para atenuar possíveis colisões de nomes. É recomendável que o namespace inclua os componentes a seguir.

  • 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 disposto em uma hierarquia de pastas, conforme mostrado na imagem a seguir.

Estrutura de pasta de exemplo

Onde 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 pré-fabricados com script de perfil.

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 (por exemplo: Microsoft.MixedReality.Toolkit.CameraSystem).

Estrutura de pastas

Todo o código deve estar localizado em uma pasta abaixo de MRTK/Provedores (por exemplo: 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 (por exemplo, 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 herança de interface e/ou 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âmeras. A base do 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 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 tiver sido 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() e Initialize() sejam implementados 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

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

Definir o perfil

O conteúdo do perfil deve espelho as opções de configuração selecionáveis pelo desenvolvedor. Todas as propriedades configuráveis pelo usuário 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 usando o menu Criar>Ativos> Realidade MisturadaPerfis do Kit de Ferramentas>.

Implementar o inspetor

Os inspetores de perfil são a interface do usuário para configurar e exibir o conteúdo do 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 ajudar o Unity a reduzir o 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 Repositório de Ativos do Unity.

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