Skapa en kamerainställningsprovider – MRTK2

Kamerasystemet är ett utökningsbart system för att ge stöd för plattformsspecifika kamerakonfigurationer. Om du vill lägga till stöd för en ny kamerakonfiguration kan en anpassad inställningsprovider krävas.

Anteckning

Den fullständiga källkoden som används i det här exemplet finns i mappen MRTK/Providers/UnityAR .

Namnområde och mappstruktur

Dataleverantörer kan distribueras på något av två sätt:

  1. Tillägg från tredje part
  2. En del av Microsoft Mixed Reality Toolkit

Godkännandeprocessen för inlämning av nya dataleverantörer till MRTK kommer att variera från fall till fall och kommer att meddelas vid tidpunkten för det ursprungliga förslaget. Förslag kan skickas genom att skapa ett nytt problem av typen Funktionsbegäran.

Tillägg från tredje part

Namnområde

Dataprovidrar måste ha ett namnområde för att minimera potentiella namnkollisioner. Vi rekommenderar att namnområdet innehåller följande komponenter.

  • Företagsnamn som producerar tillägget
  • Funktionsområde

Till exempel kan en kamerainställningsprovider som skapats och levererats av Contoso-företaget vara "Contoso.MixedReality.Toolkit.Camera".

Mappstrukturen

Vi rekommenderar att källkoden för dataproviders placeras i en mapphierarki enligt följande bild.

Exempel på mappstruktur

Om mappen ContosoCamera innehåller implementeringen av dataprovidern innehåller mappen Editor inspektören (och eventuell annan specifik kod för Unity-redigeraren) och mappen Profiler innehåller ett eller flera färdiga skriptbara profilobjekt.

MRTK-inlämning

Namnområde

Om en kamerainställningsprovider skickas till Mixed Reality Toolkit-lagringsplatsenmåste namnområdet börja med Microsoft.MixedReality.Toolkit (t.ex. Microsoft.MixedReality.Toolkit.CameraSystem).

Mappstrukturen

All kod måste finnas i en mapp under MRTK/Providers (till exempel MRTK/Providers/UnityAR).

Definiera kamerainställningsobjektet

Det första steget i att skapa en leverantör av kamerainställningar är att bestämma vilken typ av data (t.ex. nät eller plan) som den ska tillhandahålla till program.

Alla rumsliga dataobjekt måste implementera IMixedRealityCameraSettingsProvider gränssnittet.

Implementera inställningsprovidern

Ange arv av gränssnitt och/eller basklass

Alla kamerainställningar måste implementera IMixedRealityCameraSettingsProvider gränssnittet, vilket anger den minsta funktionalitet som krävs av kamerasystemet. MRTK-grunden innehåller BaseCameraSettingsProvider klassen som tillhandahåller en standardimplementering av de nödvändiga funktionerna.

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

Använda attributet MixedRealityDataProvider

Ett viktigt steg i att skapa en kamerainställningsprovider är att tillämpa MixedRealityDataProvider attributet på klassen . Det här steget gör det möjligt att ange standardprofilen och plattformen för dataprovidern, när de väljs i profilen Kamerasystem samt namn, mappsökväg med mera.

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

Implementera metoderna IMixedRealityDataProvider

När klassen har definierats är nästa steg att tillhandahålla implementeringen av IMixedRealityDataProvider gränssnittet.

Anteckning

Klassen BaseDataProvider tillhandahåller, via BaseService klassen, tomma implementeringar för IMixedRealityDataProvider metoder. Informationen om dessa metoder är vanligtvis dataleverantörsspecifika.

De metoder som ska implementeras av dataprovidern är:

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

Anteckning

Alla inställningsleverantörer kräver inte implementeringar för alla dessa metoder. Vi rekommenderar starkt att Destroy() och Initialize() implementeras som ett minimum.

Implementera dataproviderlogik

Nästa steg är att lägga till logiken för inställningsprovidern genom att implementera IMixedRealityCameraSettingsProvider. Den här delen av dataleverantören är vanligtvis kamerakonfigurationsspecifik.

Skapa profilen och kontrollanten

I Mixed Reality Toolkit konfigureras dataprovidrar med hjälp av profiler.

Definiera profilen

Profilinnehållet bör spegla utvecklarens valbara konfigurationsalternativ. Alla användarkonfigurerbara egenskaper som definierats i varje gränssnitt ska också finnas i profilen.

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

Attributet CreateAssetMenu kan tillämpas på profilklassen så att kunder kan skapa en profilinstans med hjälp av menyn Skapa>tillgångar>Mixed Reality Toolkit-profiler>.

Implementera inspektören

Profilkontrollanter är användargränssnittet för att konfigurera och visa profilinnehåll. Varje profilkontroll bör utöka BaseMixedRealityToolkitConfigurationProfileInspector klassen.

Attributet CustomEditor informerar Unity om vilken typ av tillgång som kontrollanten gäller för.

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

Skapa sammansättningsdefinitioner

Mixed Reality Toolkit använder sammansättningsdefinitionsfiler (.asmdef) för att ange beroenden mellan komponenter samt för att hjälpa Unity att minska kompileringstiden.

Vi rekommenderar att sammansättningsdefinitionsfiler skapas för alla dataleverantörer och deras redigerarkomponenter.

Med hjälp av mappstrukturen i det tidigare exemplet skulle det finnas två .asmdef-filer för ContosoCamera-dataprovidern.

Den första sammansättningsdefinitionen gäller för dataprovidern. I det här exemplet kallas det ContosoCamera och finns i exemplets ContosoCamera-mapp . Den här sammansättningsdefinitionen måste ange ett beroende för Microsoft.MixedReality.Toolkit och andra sammansättningar som den är beroende av.

Sammansättningsdefinitionen ContosoCameraEditor anger profilkontrollen och eventuell redigeringsspecifik kod. Den här filen måste finnas i rotmappen i redigeringskoden. I det här exemplet finns filen i mappen ContosoCamera\Editor . Den här sammansättningsdefinitionen innehåller en referens till ContosoCamera-sammansättningen samt:

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

Registrera dataprovidern

När dataleverantören har skapats kan den registreras med kamerasystemet som ska användas i programmet.

Välja kamerainställningsprovidern

Paketering och distribution

Dataleverantörer som distribueras som komponenter från tredje part har specifik information om paketering och distribution som utvecklare föredrar. Förmodligen är den vanligaste lösningen att generera ett .unitypackage och distribuera via Unity Asset Store.

Om en dataleverantör skickas in och godkänns som en del av Microsoft Mixed Reality Toolkit-paketet paketeras och distribueras Microsoft MRTK-teamet som en del av MRTK-erbjudandena.

Se även