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:
- Add-Ons von Drittanbietern
- 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.
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.
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.