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:
- Suplementos de terceiros
- 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.
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.
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.