Delen via


Een provider voor camera-instellingen maken — MRTK2

Het camerasysteem is een uitbreidbaar systeem dat ondersteuning biedt voor platformspecifieke cameraconfiguraties. Als u ondersteuning wilt toevoegen voor een nieuwe cameraconfiguratie, is mogelijk een provider voor aangepaste instellingen vereist.

Notitie

De volledige broncode die in dit voorbeeld wordt gebruikt, vindt u in de map MRTK/Providers/UnityAR .

Naamruimte en mapstructuur

Gegevensproviders kunnen op twee manieren worden gedistribueerd:

  1. Invoegtoepassingen van derden
  2. Onderdeel van Microsoft Mixed Reality Toolkit

Het goedkeuringsproces voor het indienen van nieuwe gegevensproviders bij MRTK varieert per geval en wordt op het moment van het eerste voorstel gecommuniceerd. Voorstellen kunnen worden ingediend door een nieuw probleem met het type functieaanvraag te maken.

Invoegtoepassingen van derden

Naamruimte

Gegevensproviders moeten een naamruimte hebben om mogelijke naamconflicten te beperken. Het wordt aanbevolen dat de naamruimte de volgende onderdelen bevat.

  • Bedrijfsnaam die de invoegtoepassing produceert
  • Functiegebied

Een provider voor camera-instellingen die door het bedrijf Contoso is gemaakt en verzonden, kan bijvoorbeeld Contoso.MixedReality.Toolkit.Camera zijn.

Mapstructuur

Het wordt aanbevolen om de broncode voor gegevensproviders in te delen in een maphiërarchie, zoals wordt weergegeven in de volgende afbeelding.

Voorbeeld van mapstructuur

Waar de map ContosoCamera de implementatie van de gegevensprovider bevat, bevat de map Editor de inspector (en eventuele andere specifieke code van de Unity-editor) en de map Profiles bevat een of meer vooraf gemaakte profielscriptobjecten.

MRTK-inzending

Naamruimte

Als een provider voor camera-instellingen wordt verzonden naar de opslagplaats Mixed Reality Toolkit, moet de naamruimte beginnen met Microsoft.MixedReality.Toolkit (bijvoorbeeld: Microsoft.MixedReality.Toolkit.CameraSystem).

Mapstructuur

Alle code moet zich bevinden in een map onder MRTK/Providers (bijvoorbeeld MRTK/Providers/UnityAR).

Het camera-instellingenobject definiëren

De eerste stap bij het maken van een provider voor camera-instellingen is het bepalen van het type gegevens (bijvoorbeeld meshes of vlakken) dat aan toepassingen wordt verstrekt.

Alle ruimtelijke gegevensobjecten moeten de IMixedRealityCameraSettingsProvider interface implementeren.

De instellingenprovider implementeren

Overname van interface en/of basisklasse opgeven

Alle providers van camera-instellingen moeten de IMixedRealityCameraSettingsProvider interface implementeren, die de minimale functionaliteit specificeert die door het camerasysteem is vereist. De MRTK-basis bevat de BaseCameraSettingsProvider klasse die een standaard implementatie van de vereiste functionaliteit biedt.

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

Het kenmerk MixedRealityDataProvider toepassen

Een belangrijke stap bij het maken van een provider voor camera-instellingen is het toepassen van het MixedRealityDataProvider kenmerk op de klasse. Met deze stap kunt u het standaardprofiel en platform(en) voor de gegevensprovider instellen, indien geselecteerd in het profiel Camerasysteem, evenals naam, mappad en meer.

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

De IMixedRealityDataProvider-methoden implementeren

Zodra de klasse is gedefinieerd, is de volgende stap het opgeven van de implementatie van de IMixedRealityDataProvider interface.

Notitie

De BaseDataProvider klasse, via de BaseService klasse, biedt lege implementaties voor IMixedRealityDataProvider methoden. De details van deze methoden zijn over het algemeen gegevensproviderspecifiek.

De methoden die door de gegevensprovider moeten worden geïmplementeerd, zijn:

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

Notitie

Niet alle instellingenproviders vereisen implementaties voor al deze methoden. Het wordt ten zeerste aanbevolen dat Destroy() en Initialize() ten minste worden geïmplementeerd.

De logica van de gegevensprovider implementeren

De volgende stap is het toevoegen van de logica van de instellingenprovider door te implementeren IMixedRealityCameraSettingsProvider. Dit gedeelte van de gegevensprovider is doorgaans specifiek voor de cameraconfiguratie.

Het profiel en de controle maken

In Mixed Reality Toolkit worden gegevensproviders geconfigureerd met behulp van profielen.

Het profiel definiëren

De profielinhoud moet een weerspiegeling zijn van de configuratieopties die door de ontwikkelaar kunnen worden geselecteerd. Alle door de gebruiker configureerbare eigenschappen die in elke interface zijn gedefinieerd, moeten ook worden opgenomen in het profiel.

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

Het CreateAssetMenu kenmerk kan worden toegepast op de profielklasse, zodat klanten een profielexemplaar kunnen maken met behulp van het> menuAssets>maken Mixed RealityToolkit-profielen>.

De inspector implementeren

Profielcontrole is de gebruikersinterface voor het configureren en weergeven van profielinhoud. Elke profielcontrole moet de BaseMixedRealityToolkitConfigurationProfileInspector klasse uitbreiden.

Het CustomEditor kenmerk informeert Unity over het type asset waarop de inspector van toepassing is.

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

Assembly-definitie(s) maken

Mixed Reality Toolkit gebruikt assemblydefinitiebestanden (.asmdef) om afhankelijkheden tussen onderdelen op te geven en om Unity te helpen bij het verkorten van de compilatietijd.

Het wordt aanbevolen om assemblydefinitiebestanden te maken voor alle gegevensproviders en hun editoronderdelen.

Met behulp van de mapstructuur in het eerdere voorbeeld zijn er twee ASMDEF-bestanden voor de gegevensprovider ContosoCamera.

De eerste assemblydefinitie is voor de gegevensprovider. In dit voorbeeld krijgt deze de naam ContosoCamera en bevindt deze zich in de map ContosoCamera van het voorbeeld. Deze assemblydefinitie moet een afhankelijkheid opgeven van Microsoft.MixedReality.Toolkit en andere assembly's waarvan deze afhankelijk is.

De contosoCameraEditor-assemblydefinitie geeft de profielcontrole en eventuele editorspecifieke code op. Dit bestand moet zich in de hoofdmap van de editorcode bevinden. In dit voorbeeld bevindt het bestand zich in de map ContosoCamera\Editor . Deze assemblydefinitie bevat een verwijzing naar de ContosoCamera-assembly en:

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

De gegevensprovider registreren

Zodra de gegevensprovider is gemaakt, kan deze worden geregistreerd bij het camerasysteem dat in de toepassing moet worden gebruikt.

De provider voor camera-instellingen selecteren

Verpakking en distributie

Gegevensproviders die worden gedistribueerd als onderdelen van derden, hebben de specifieke details van de verpakking en distributie overgelaten aan de voorkeur van de ontwikkelaar. De meest voorkomende oplossing is waarschijnlijk het genereren van een .unitypackage en het distribueren via de Unity Asset Store.

Als een gegevensprovider wordt ingediend en geaccepteerd als onderdeel van het Microsoft Mixed Reality Toolkit-pakket, zal het Microsoft MRTK-team deze inpakken en distribueren als onderdeel van de MRTK-aanbiedingen.

Zie ook