Creazione di un provider di impostazioni della fotocamera

Il sistema camera è un sistema estendibile per fornire il supporto per le configurazioni della fotocamera specifiche 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.

Spazio dei nomi e struttura di cartelle

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

  1. Componenti aggiuntivi di terze parti
  2. Parte di Microsoft Mixed Reality Toolkit

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

Componenti aggiuntivi di terze parti

Namespace

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

  • Nome della 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 che il codice sorgente per i provider di dati sia disponibile 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 predefiniti del profilo che è possibile creare script.

Invio di MRTK

Namespace

Se un provider di impostazioni della fotocamera viene inviato al repository mixed reality 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/Providers (ad esempio: MRTK/Providers/UnityAR).

Definire l'oggetto impostazioni della fotocamera

Il primo passaggio per la creazione di un provider di impostazioni della fotocamera consiste nel determinare il tipo di dati (ad esempio mesh o piani) che fornirà alle applicazioni.

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

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 , che IMixedRealityCameraSettingsProvider specifica la funzionalità minima richiesta dal sistema di fotocamera. La base di MRTK include BaseCameraSettingsProvider la 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 MixedRealityDataProvider l'attributo alla classe . Questo passaggio abilita l'impostazione del profilo e delle piattaforme predefiniti per il provider di dati, se selezionato nel profilo Sistema fotocamera, nonché nome, 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

Dopo aver definito la classe , il passaggio successivo consiste nel fornire l'implementazione IMixedRealityDataProvider dell'interfaccia .

Nota

La BaseDataProvider classe , tramite la classe , fornisce BaseService implementazioni vuote per i metodi IMixedRealityDataProvider . 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 richiederanno implementazioni per tutti questi metodi. È consigliabile che Destroy() e Initialize() siano implementati come minimo.

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 sarà in genere specifica della configurazione della fotocamera.

Creare il profilo e il controllo

In Mixed Reality Toolkit i provider di dati vengono configurati usando i profili.

Definire il profilo

Il contenuto del profilo deve rispecchiare le opzioni di configurazione selezionabili dallo sviluppatore. Anche tutte le proprietà configurabili dall'utente definite in ogni interfaccia devono essere contenute nel 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 può essere applicato alla classe del profilo per consentire ai clienti di creare un'istanza del profilo usando il menu Crea profili di CreateAssetMenu > Assets > Mixed Reality Toolkit. >

Implementare il controllo

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

CustomEditorL'attributo indica a 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

Mixed Reality Toolkit usa i file di definizione dell'assembly (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, saranno presenti due file asmdef per il provider di dati ContosoCamera.

La prima definizione di assembly è per il provider di dati. Per questo esempio, si chiamerà ContosoCamera e si trova nella cartella ContosoCamera dell'esempio. Questa definizione di assembly deve specificare una dipendenza da Microsoft.MixedReality.Toolkit e da qualsiasi altro assembly da cui dipende.

La definizione dell'assembly ContosoCameraEditor specificherà 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, nonché:

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

Registrare il provider di dati

Una volta creato, il provider di dati può essere registrato con il sistema Camera 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 dei pacchetti e della distribuzione lasciati alle preferenze dello sviluppatore. È probabile che la soluzione più comune sia generare un file con estensione unitypackage e distribuirsi tramite Unity Asset Store.

Se un provider di dati viene inviato e accettato come parte del pacchetto Microsoft Mixed Reality Toolkit, il team di Microsoft MRTK lo inserirà in un pacchetto e lo distribuirà come parte delle offerte di MRTK.

Vedi anche