Criar um provedor de configurações de câmera

O sistema de câmera é um sistema extensível para fornecer suporte para configurações de câmera específicas da plataforma. Para adicionar suporte a uma nova configuração de câmera, um provedor de configurações personalizado 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 pastas

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

  1. Complementos de terceiros
  2. Parte da realidade misturada da Microsoft Toolkit

O processo de aprovação para envios de novos provedores de dados para o MRTK variará de acordo com o 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 colisões de nomes potenciais. É 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. Câmera ".

Estrutura de pastas

É recomendável que o código-fonte para provedores de dados seja layeddo 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 do 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 programáveis por script predefinidos.

Envio de MRTK

Namespace

se um provedor de configurações de câmera estiver sendo enviado para a realidade misturada Toolkit repositório, 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/Providers (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 aviões) que ele fornecerá aos aplicativos.

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

Implementar o provedor de configurações

Especificar a interface e/ou a 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. O MRTK Foundation 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 de sistema da 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 precisarão de implementações para todos esses métodos. É altamente recomendável que Destroy() e 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

na 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 pelo desenvolvedor. Qualquer propriedade configurável pelo usuário definida em cada interface também deve estar contida 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 create > assets > Mixed reality Toolkit > profiles .

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ção (ões) de assembly

a 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 do assembly é para o provedor de dados. Para este exemplo, ele será chamado de ContosoCamera e estará localizado na pasta ContosoCamera do exemplo. Esta definição de assembly deve especificar uma dependência em Microsoft. MixedReality. Toolkit e quaisquer outros assemblies sobre os quais 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. inspetores
  • Microsoft. MixedReality. Toolkit. Editor. Utilities

Registrar o provedor de dados

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

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

Empacotamento e distribuição

Os provedores de dados que são 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 de Toolkit da realidade misturada da microsoft, a equipe do microsoft MRTK irá empacotá-lo e distribuí-lo como parte das ofertas do MRTK.

Confira também