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

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

Nota

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

Espaço de nome e estrutura de pasta

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

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

O processo de aprovação para a apresentação de novos fornecedores de dados ao MRTK variará caso a caso e será comunicado no momento da proposta inicial. As propostas podem ser submetidas através da criação de um novo número de pedido de recurso.

Complementos de terceiros

Espaço de Nomes

Os fornecedores de dados são obrigados a ter um espaço de nome 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 add-on
  • Área de recursos

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

Estrutura de pasta

Recomenda-se que o código-fonte dos fornecedores de dados seja escondido numa hierarquia de pasta, tal como 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 inspetor (e qualquer outro código específico do editor de Unidade), e a pasta Perfis contém um ou mais objetos scriptáveis de perfil pré-fabricados.

Submissão mrtk

Espaço de Nomes

Se um fornecedor de definições de câmara estiver a ser submetido ao repositório de ferramentas de realidade mista,o espaço de nomes deve começar por Microsoft.MixedReality.Toolkit (ex: Microsoft.MixedReality.Toolkit.CameraSystem).

Estrutura de pasta

Todo o código deve estar situado numa pasta sob MRTK/Fornecedores (ex: MRTK/Providers/UnityAR).

Defina o objeto de definições de câmara

O primeiro passo para a criação de um fornecedor de definições de câmara é determinar o tipo de dados (ex: malhas ou aviões) que irá fornecer às aplicações.

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

Implementar o fornecedor de definições

Especificar interface e/ou herança de classe base

Todos os fornecedores de configurações de câmara devem implementar a IMixedRealityCameraSettingsProvider interface, que especifica a funcionalidade mínima exigida pelo sistema de câmara. A fundação 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

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 predefinido e a plataforma(s) para o fornecedor de dados, quando selecionado no perfil do Sistema de Câmara, bem como nome, caminho de 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

Uma vez definida a classe, o próximo passo é fornecer a implementação da IMixedRealityDataProvider interface.

Nota

A BaseDataProvider aula, 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. Recomenda-se vivamente que Destroy() seja Initialize() 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 através da implementação IMixedRealityCameraSettingsProvider . Esta parte do fornecedor de dados será normalmente específica para a configuração da câmara.

Crie o perfil e o inspetor

No Conjunto de Ferramentas de Realidade Mista, os fornecedores de dados são configurados utilizando perfis.

Definir o perfil

O conteúdo do perfil deve espelhar as opções de configuração selecionáveis do desenvolvedor. Quaisquer propriedades configuráveis do utilizador definidas em cada interface também devem ser 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 na classe de perfil para permitir que os clientes criem uma instância de perfil utilizando o menu CreateAssetMenu>>>>>>

Implementar o inspetor

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

O CustomEditor atributo informa a Unidade do tipo de ativo a que o inspetor se aplica.

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

Criar definição de montagem(s)

O Mixed Reality Toolkit utiliza ficheiros de montagem(.asmdef)para especificar dependências entre componentes, bem como para ajudar a Unidade na redução do tempo de compilação.

Recomenda-se que os ficheiros de definição de montagem sejam criados para todos os fornecedores de dados e seus componentes editoriais.

Utilizando a estrutura da pasta no exemplo anterior, existiriam dois ficheiros .asmdef para o fornecedor de dados ContosoCamera.

A primeira definição de montagem destina-se ao fornecedor de dados. Para este exemplo, será chamado ContosoCamera e ficará localizado na pasta ContosoCamera do exemplo. Esta definição de montagem deve especificar uma dependência do Microsoft.MixedReality.Toolkit e de quaisquer outros conjuntos de que dependa.

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

  • Microsoft.MixedReality.Toolkit
  • Microsoft.MixedReality.Toolkit.Editor.Inspetores
  • Microsoft.MixedReality.Toolkit.Editor.Utilities

Registar o fornecedor de dados

Uma vez criado, o fornecedor de dados pode ser registado no sistema Camera a ser utilizado na aplicação.

Selecionando o fornecedor de definições de câmara

Embalagem e distribuição

Os fornecedores de dados que são distribuídos como componentes de terceiros têm os detalhes específicos da embalagem e distribuição deixadas à preferência do desenvolvedor. Provavelmente, a solução mais comum será gerar uma .unidadepackage e distribuir através da Unity Asset Store.

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

Ver também