Erstellen eines Kameraeinstellungsanbieters – MRTK2

Das Kamerasystem ist ein erweiterbares System zur Unterstützung plattformspezifischer Kamerakonfigurationen. Um Unterstützung für eine neue Kamerakonfiguration hinzuzufügen, ist möglicherweise ein benutzerdefinierter Einstellungsanbieter erforderlich.

Hinweis

Den vollständigen Quellcode, der in diesem Beispiel verwendet wird, finden Sie im Ordner MRTK/Providers/UnityAR .

Namespace- und Ordnerstruktur

Datenanbieter können auf zwei Arten verteilt werden:

  1. Add-Ons von Drittanbietern
  2. Teil des Microsoft Mixed Reality Toolkits

Das Genehmigungsverfahren für die Übermittlung neuer Datenanbieter an MRTK variiert von Fall zu Fall und wird zum Zeitpunkt des ursprünglichen Vorschlags mitgeteilt. Vorschläge können übermittelt werden, indem ein neues Problem mit dem Featureanforderungstyp erstellt wird.

Add-Ons von Drittanbietern

Namespace

Datenanbieter müssen über einen Namespace verfügen, um potenzielle Namenskonflikte zu vermeiden. Es wird empfohlen, dass der Namespace die folgenden Komponenten enthält.

  • Firmenname, der das Add-On erstellt
  • Featurebereich

Ein Kameraeinstellungsanbieter, der vom Unternehmen Contoso erstellt und ausgeliefert wird, kann beispielsweise "Contoso.MixedReality.Toolkit.Camera" sein.

Ordnerstruktur

Es wird empfohlen, den Quellcode für Datenanbieter in einer Ordnerhierarchie zu erstellen, wie in der folgenden Abbildung dargestellt.

Beispiel für die Paketordnerstruktur

Wenn der Ordner ContosoCamera die Implementierung des Datenanbieters enthält, enthält der Ordner Editor den Inspektor (und jeden anderen spezifischen Unity-Editor-Code), und der Ordner Profile enthält mindestens ein vordefiniertes profilskriptfähiges Objekt.

MRTK-Übermittlung

Namespace

Wenn ein Kameraeinstellungsanbieter an das Mixed Reality Toolkit-Repository übermittelt wird, muss der Namespace mit Microsoft.MixedReality.Toolkit (z. B. Microsoft.MixedReality.Toolkit.CameraSystem) beginnen.

Ordnerstruktur

Der gesamte Code muss sich in einem Ordner unter MRTK/Providers (z. B. MRTK/Providers/UnityAR) befinden.

Definieren des Kameraeinstellungsobjekts

Der erste Schritt beim Erstellen eines Kameraeinstellungsanbieters besteht darin, den Typ der Daten (z. B. Gitter oder Ebenen) zu bestimmen, die er anwendungen bereitstellt.

Alle räumlichen Datenobjekte müssen die IMixedRealityCameraSettingsProvider Schnittstelle implementieren.

Implementieren des Einstellungsanbieters

Angeben von Schnittstellen- und/oder Basisklassenvererbung

Alle Kameraeinstellungsanbieter müssen die IMixedRealityCameraSettingsProvider Schnittstelle implementieren, die die Mindestfunktionalität angibt, die für das Kamerasystem erforderlich ist. Die MRTK-Grundlage enthält die BaseCameraSettingsProvider -Klasse, die eine Standardimplementierung der erforderlichen Funktionalität bereitstellt.

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

Anwenden des MixedRealityDataProvider-Attributs

Ein wichtiger Schritt beim Erstellen eines Kameraeinstellungsanbieters ist das Anwenden des MixedRealityDataProvider Attributs auf die Klasse. Dieser Schritt ermöglicht das Festlegen des Standardprofils und der Plattform(en) für den Datenanbieter, wenn sie im Kamerasystemprofil sowie im Namen, Ordnerpfad und mehr ausgewählt sind.

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

Implementieren der IMixedRealityDataProvider-Methoden

Nachdem die -Klasse definiert wurde, besteht der nächste Schritt darin, die Implementierung der IMixedRealityDataProvider Schnittstelle bereitzustellen.

Hinweis

Die BaseDataProvider -Klasse stellt über die BaseService -Klasse leere Implementierungen für IMixedRealityDataProvider Methoden bereit. Die Details dieser Methoden sind in der Regel datenanbieterspezifisch.

Die Methoden, die vom Datenanbieter implementiert werden sollten, sind:

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

Hinweis

Nicht für alle Einstellungsanbieter sind Implementierungen für alle diese Methoden erforderlich. Es wird dringend empfohlen, mindestens Destroy() zu implementieren.Initialize()

Implementieren der Datenanbieterlogik

Der nächste Schritt besteht darin, die Logik des Einstellungsanbieters hinzuzufügen, indem Sie implementieren IMixedRealityCameraSettingsProvider. Dieser Teil des Datenanbieters ist in der Regel kamerakonfigurationsspezifisch.

Erstellen des Profils und des Inspektors

In Mixed Reality Toolkit werden Datenanbieter mithilfe von Profilen konfiguriert.

Definieren des Profils

Profilinhalte sollten dem Entwickler Spiegel, die auswählbare Konfigurationsoptionen auswählen können. Alle vom Benutzer konfigurierbaren Eigenschaften, die in jeder Schnittstelle definiert sind, sollten ebenfalls im Profil enthalten sein.

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

Das CreateAssetMenu Attribut kann auf die Profilklasse angewendet werden, damit Kunden ein Profil instance erstellen können, indem Sie das MenüRessourcen>erstellen>Mixed Reality Toolkitprofile>verwenden.

Implementieren des Inspektors

Profilinspektoren sind die Benutzeroberfläche zum Konfigurieren und Anzeigen von Profilinhalten. Jeder Profilinspektor sollte die BaseMixedRealityToolkitConfigurationProfileInspector -Klasse erweitern.

Das CustomEditor Attribut informiert Unity über den Typ des Medienobjekts, für das der Inspektor gilt.

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

Erstellen von Assemblydefinitionen

Mixed Reality Toolkit verwendet Assemblydefinitionsdateien (.asmdef), um Abhängigkeiten zwischen Komponenten anzugeben und Unity bei der Reduzierung der Kompilierungszeit zu unterstützen.

Es wird empfohlen, Assemblydefinitionsdateien für alle Datenanbieter und deren Editorkomponenten zu erstellen.

Bei Verwendung der Ordnerstruktur im vorherigen Beispiel gäbe es zwei ASMDEF-Dateien für den ContosoCamera-Datenanbieter.

Die erste Assemblydefinition ist für den Datenanbieter. In diesem Beispiel heißt es ContosoCamera und befindet sich im Ordner ContosoCamera des Beispiels. Diese Assemblydefinition muss eine Abhängigkeit von Microsoft.MixedReality.Toolkit und allen anderen Assemblys angeben, von denen sie abhängt.

Die ContosoCameraEditor-Assemblydefinition gibt den Profilinspektor und jeden editorspezifischen Code an. Diese Datei muss sich im Stammordner des Editorcodes befinden. In diesem Beispiel befindet sich die Datei im Ordner ContosoCamera\Editor . Diese Assemblydefinition enthält einen Verweis auf die ContosoCamera-Assembly sowie folgendes:

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

Registrieren des Datenanbieters

Nach der Erstellung kann der Datenanbieter beim Kamerasystem registriert werden, um in der Anwendung verwendet zu werden.

Auswählen des Kameraeinstellungsanbieters

Verpackung und Vertrieb

Datenanbieter, die als Komponenten von Drittanbietern verteilt werden, haben die spezifischen Details der Verpackung und Verteilung dem Wunsch des Entwicklers überlassen. Wahrscheinlich ist die gängigste Lösung das Generieren eines UNITY-Pakets und die Verteilung über den Unity Asset Store.

Wenn ein Datenanbieter als Teil des Microsoft Mixed Reality Toolkit-Pakets übermittelt und akzeptiert wird, verpackt und verteilt das Microsoft MRTK-Team ihn als Teil der MRTK-Angebote.

Weitere Informationen