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:
- Invoegtoepassingen van derden
- 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.
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.
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.