Creazione di un provider di impostazioni della fotocamera - MRTK2

Il sistema Camera è un sistema estendibile per fornire supporto per configurazioni specifiche della fotocamera della piattaforma. Per aggiungere il supporto per una nuova configurazione della fotocamera, potrebbe essere necessario un provider di impostazioni personalizzato.

Nota

Il codice sorgente completo usato in questo esempio è disponibile nella cartella MRTK/Providers/UnityAR .

Struttura dello spazio dei nomi e delle cartelle

I provider di dati possono essere distribuiti in uno dei due modi seguenti:

  1. Componenti aggiuntivi di terze parti
  2. Parte di Microsoft Realtà mista Toolkit

Il processo di approvazione per l'invio di nuovi provider di dati a MRTK varia in base al caso e verrà comunicato al momento della proposta iniziale. Le proposte possono essere inviate creando un nuovo problema di tipo richiesta funzionalità.

Componenti aggiuntivi di terze parti

Namespace

I provider di dati devono disporre di uno spazio dei nomi per attenuare potenziali collisioni di nomi. È consigliabile che lo spazio dei nomi includa i componenti seguenti.

  • Nome società che produce il componente aggiuntivo
  • Area funzionale

Ad esempio, un provider di impostazioni della fotocamera creato e fornito dall'azienda Contoso può essere "Contoso.MixedReality.Toolkit.Camera".

Struttura di cartelle

È consigliabile definire il codice sorgente per i provider di dati in una gerarchia di cartelle, come illustrato nell'immagine seguente.

Esempio di struttura di cartelle

Dove la cartella ContosoCamera contiene l'implementazione del provider di dati, la cartella Editor contiene il controllo (e qualsiasi altro codice specifico dell'editor Unity) e la cartella Profiles contiene uno o più oggetti script di profilo predefiniti.

Invio MRTK

Namespace

Se un provider di impostazioni della fotocamera viene inviato al repository Realtà mista Toolkit, lo spazio dei nomi deve iniziare con Microsoft.MixedReality.Toolkit (ad esempio: Microsoft.MixedReality.Toolkit.CameraSystem).

Struttura di cartelle

Tutto il codice deve trovarsi in una cartella sotto MRTK/Provider (ad esempio: MRTK/Providers/UnityAR).

Definire l'oggetto impostazioni della fotocamera

Il primo passaggio nella creazione di un provider di impostazioni della fotocamera determina il tipo di dati (ad esempio mesh o piani) che fornirà alle applicazioni.

Tutti gli oggetti dati spaziali devono implementare l'interfaccia IMixedRealityCameraSettingsProvider .

Implementare il provider di impostazioni

Specificare l'ereditarietà dell'interfaccia e/o della classe base

Tutti i provider di impostazioni della fotocamera devono implementare l'interfaccia IMixedRealityCameraSettingsProvider , che specifica la funzionalità minima richiesta dal sistema di fotocamera. La base MRTK include la BaseCameraSettingsProvider classe che fornisce un'implementazione predefinita della funzionalità richiesta.

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

Applicare l'attributo MixedRealityDataProvider

Un passaggio chiave nella creazione di un provider di impostazioni della fotocamera consiste nell'applicare l'attributo MixedRealityDataProvider alla classe. Questo passaggio abilita l'impostazione del profilo predefinito e delle piattaforme per il provider di dati, quando selezionata nel profilo del sistema fotocamera, nonché il nome, il percorso della cartella e altro ancora.

    [MixedRealityDataProvider(
        typeof(IMixedRealityCameraSystem),
        SupportedPlatforms.Android | SupportedPlatforms.IOS,
        "Unity AR Foundation Camera Settings",
        "UnityAR/Profiles/DefaultUnityARCameraSettingsProfile.asset",
        "MixedRealityToolkit.Providers")]
    public class UnityARCameraSettings : BaseCameraSettingsProvider
    { }

Implementare i metodi IMixedRealityDataProvider

Una volta definita la classe, il passaggio successivo consiste nel fornire l'implementazione dell'interfaccia IMixedRealityDataProvider .

Nota

La BaseDataProvider classe, tramite la BaseService classe, fornisce implementazioni vuote per IMixedRealityDataProvider i metodi. I dettagli di questi metodi sono in genere specifici del provider di dati.

I metodi che devono essere implementati dal provider di dati sono:

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

Nota

Non tutti i provider di impostazioni richiedono implementazioni per tutti questi metodi. È consigliabile Destroy() implementare e Initialize() implementare almeno.

Implementare la logica del provider di dati

Il passaggio successivo consiste nell'aggiungere la logica del provider di impostazioni implementando IMixedRealityCameraSettingsProvider. Questa parte del provider di dati in genere sarà specifica della configurazione della fotocamera.

Creare il profilo e il controllo

In Realtà mista Toolkit i provider di dati vengono configurati usando i profili.

Definire il profilo

Il contenuto del profilo deve eseguire il mirroring delle opzioni di configurazione selezionabili per gli sviluppatori. Tutte le proprietà configurabili dall'utente definite in ogni interfaccia devono essere contenute anche con il profilo.

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;
    }
}

L'attributo CreateAssetMenu può essere applicato alla classe profilo per consentire ai clienti di creare un'istanza del profilo usando il menu Crea>asset>Realtà mista Toolkit>Profiles.

Implementare il controllo

I controlli del profilo sono l'interfaccia utente per la configurazione e la visualizzazione del contenuto del profilo. Ogni controllo profilo deve estendere la BaseMixedRealityToolkitConfigurationProfileInspector classe.

L'attributo CustomEditor informa Unity il tipo di asset a cui si applica il controllo.

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

Creare definizioni di assembly

Realtà mista Toolkit usa i file di definizione dell'assembly (con estensione asmdef) per specificare le dipendenze tra i componenti e per aiutare Unity a ridurre il tempo di compilazione.

È consigliabile creare file di definizione dell'assembly per tutti i provider di dati e i relativi componenti dell'editor.

Usando la struttura di cartelle nell'esempio precedente, esistono due file asmdef per il provider di dati ContosoCamera.

La prima definizione dell'assembly è per il provider di dati. Per questo esempio, verrà chiamato ContosoCamera e si troverà nella cartella ContosoCamera dell'esempio. Questa definizione di assembly deve specificare una dipendenza da Microsoft.MixedReality.Toolkit e da qualsiasi altro assembly a seconda del quale dipende.

La definizione dell'assembly ContosoCameraEditor specifica il controllo del profilo e qualsiasi codice specifico dell'editor. Questo file deve trovarsi nella cartella radice del codice dell'editor. In questo esempio il file si trova nella cartella ContosoCamera\Editor . Questa definizione di assembly conterrà un riferimento all'assembly ContosoCamera e:

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

Registrare il provider di dati

Dopo aver creato, il provider di dati può essere registrato con il sistema Fotocamera da usare nell'applicazione.

Selezione del provider di impostazioni della fotocamera

Creazione di pacchetti e distribuzione

I provider di dati distribuiti come componenti di terze parti hanno i dettagli specifici della creazione di pacchetti e della distribuzione lasciati alla preferenza dello sviluppatore. Probabilmente, la soluzione più comune sarà generare un pacchetto unity e distribuire tramite Unity Asset Store.

Se un provider di dati viene inviato e accettato come parte del pacchetto Microsoft Realtà mista Toolkit, il team microsoft MRTK lo conterrà e lo distribuirà come parte delle offerte MRTK.

Vedi anche