Création d’un fournisseur de données système d’entrée — MRTK2

Le système d’entrée Mixed Reality Toolkit est un système extensible permettant de prendre en charge les périphériques d’entrée. Pour ajouter la prise en charge d’une nouvelle plateforme matérielle, un fournisseur de données d’entrée personnalisé peut être nécessaire.

Cet article explique comment créer des fournisseurs de données personnalisés, également appelés gestionnaires d’appareils, pour le système d’entrée. L’exemple de code présenté ici provient de .WindowsMixedRealityDeviceManager

Le code complet utilisé dans cet exemple se trouve dans le dossier MRTK/Providers/WindowsMixedReality.

Structure de l’espace de noms et des dossiers

Les fournisseurs de données peuvent être distribués en tant que module complémentaire tiers ou dans le cadre de Microsoft Mixed Reality Toolkit. Le processus d’approbation des soumissions de nouveaux fournisseurs de données à MRTK variera au cas par cas et sera communiqué au moment de la proposition initiale.

Important

Si un fournisseur de données système d’entrée est soumis au référentiel Mixed Reality Toolkit, l’espace de noms doit commencer par Microsoft.MixedReality.Toolkit (par exemple, Microsoft.MixedReality.Toolkit.WindowsMixedReality) et le code doit se trouver dans un dossier sous MRTK/Providers (par exemple, MRTK/Providers/WindowsMixedReality).

Espace de noms

Les fournisseurs de données doivent disposer d’un espace de noms pour atténuer les collisions de noms potentielles. Il est recommandé que l’espace de noms inclue les composants suivants.

  • Nom de la société
  • Domaine de fonctionnalité

Par exemple, un fournisseur de données d’entrée créé par l’entreprise Contoso peut être « Contoso.MixedReality.Toolkit.Input ».

Il est recommandé que le code source des fournisseurs de données soit retardé dans une hiérarchie de dossiers, comme illustré dans l’image suivante.

Exemple de structure de dossiers

Là où ContosoInput contient l’implémentation du fournisseur de données, le dossier Editor contient l’inspecteur (et tout autre code spécifique à l’éditeur Unity), le dossier Textures contient des images des contrôleurs pris en charge et Profiles contient un ou plusieurs profils prédéfinits.

Notes

Certaines images de contrôleur courantes se trouvent dans le dossier MixedRealityToolkit\StandardAssets\Textures.

Implémenter le fournisseur de données

Spécifier l’héritage de l’interface et/ou de la classe de base

Tous les fournisseurs de données du système d’entrée doivent implémenter l’interface IMixedRealityInputDeviceManager , qui spécifie les fonctionnalités minimales requises par le système d’entrée. La base MRTK inclut la BaseInputDeviceManager classe qui fournit une implémentation par défaut de cette fonctionnalité requise. Pour les appareils qui s’appuient sur la classe UInput d’Unity, la UnityJoystickManager classe peut être utilisée comme classe de base.

Notes

Les BaseInputDeviceManager classes et UnityJoystickManager fournissent l’implémentation requise IMixedRealityInputDeviceManager .

public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

IMixedRealityCapabilityCheck est utilisé par le WindowsMixedRealityDeviceManager pour indiquer qu’il fournit la prise en charge d’un ensemble de fonctionnalités d’entrée, en particulier les mains articulées, les mains de mouvement du regard et les contrôleurs de mouvement.

Appliquer l’attribut MixedRealityDataProvider

Une étape clé de la création d’un fournisseur de données système d’entrée consiste à appliquer l’attribut MixedRealityDataProvider à la classe . Cette étape permet de définir le profil et la ou les plateformes par défaut pour le fournisseur, lorsqu’elle est sélectionnée dans le profil système d’entrée.

[MixedRealityDataProvider(
    typeof(IMixedRealityInputSystem),
    SupportedPlatforms.WindowsUniversal,
    "Windows Mixed Reality Device Manager")]
public class WindowsMixedRealityDeviceManager :
    BaseInputDeviceManager,
    IMixedRealityCapabilityCheck
{ }

Implémenter les méthodes IMixedRealityDataProvider

Une fois la classe définie, l’étape suivante consiste à fournir l’implémentation de l’interface IMixedRealityDataProvider .

Notes

La BaseInputDeviceManager classe, via la BaseService classe , fournit uniquement des implémentations vides pour IMixedRealityDataProvider les méthodes. Les détails de ces méthodes sont généralement spécifiques au fournisseur de données.

Les méthodes qui doivent être implémentées par le fournisseur de données sont les suivantes :

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

Implémenter la logique du fournisseur de données

L’étape suivante consiste à ajouter la logique de gestion des périphériques d’entrée, y compris les contrôleurs à prendre en charge.

Implémenter les classes de contrôleur

L’exemple de définit WindowsMixedRealityDeviceManager et implémente les classes de contrôleur suivantes.

Le code source de chacune de ces classes se trouve dans le dossier MRTK/Providers/WindowsMixedReality.

  • WindowsMixedRealityArticulatedHand.cs
  • WindowsMixedRealityController.cs
  • WindowsMixedRealityGGVHand.cs

Notes

Tous les gestionnaires d’appareils ne prennent pas en charge plusieurs types de contrôleurs.

Appliquer l’attribut MixedRealityController

Ensuite, appliquez l’attribut MixedRealityController à la classe . Cet attribut spécifie le type de contrôleur (par exemple, main articulée), la main (par exemple, gauche ou droite) et une image de contrôleur facultative.

[MixedRealityController(
    SupportedControllerType.WindowsMixedReality,
    new[] { Handedness.Left, Handedness.Right },
    "StandardAssets/Textures/MotionController")]
{ }

Configurer les mappages d’interaction

L’étape suivante consiste à définir l’ensemble des mappages d’interaction pris en charge par le contrôleur. Pour les appareils qui reçoivent leurs données via la classe Input d’Unity, l’outil de mappage de contrôleur est une ressource utile pour confirmer les mappages d’axes et de boutons corrects à affecter aux interactions.

L’exemple suivant est abrégé à partir de la GenericOpenVRController classe , située dans le dossier MRTK/Providers/OpenVR.

public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[]
{
    // Controller Pose
    new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None),
    // Left Trigger Squeeze
    new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9),
    // Left Trigger Press (Select)
    new MixedRealityInteractionMapping(2, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14),
};

Notes

La ControllerMappingLibrary classe fournit des constantes symboliques pour les définitions d’axe d’entrée et de bouton Unity.

Déclencher des événements de notification

Pour permettre aux applications de répondre aux entrées de l’utilisateur, le fournisseur de données déclenche des événements de notification correspondant aux changements d’état du contrôleur, comme défini dans les IMixedRealityInputHandler interfaces et IMixedRealityInputHandler<T> .

Pour les contrôles de type numérique (bouton), déclenchez les événements OnInputDown et OnInputUp.

// inputAction is the input event that is to be raised.
if (interactionSourceState.touchpadPressed)
{
    InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, inputAction);
}
else
{
    InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, inputAction);
}

Pour les contrôles analogiques (par exemple, position du pavé tactile), l’événement InputChanged doit être déclenché.

InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionSourceState.touchpadPosition);

Ajouter l’instrumentation Unity Profiler

Les performances sont essentielles dans les applications de réalité mixte. Chaque composant ajoute une certaine surcharge pour laquelle les applications doivent prendre en compte. À cette fin, il est important que tous les fournisseurs de données d’entrée contiennent l’instrumentation Unity Profiler dans la boucle interne et les chemins de code fréquemment utilisés.

Il est recommandé d’implémenter le modèle utilisé par MRTK lors de l’instrumentation de fournisseurs personnalisés.

        private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] WindowsMixedRealityDeviceManager.GetOrAddController");

        private async void GetOrAddController(InteractionSourceState interactionSourceState)
        {
            using (GetOrAddControllerPerfMarker.Auto())
            {
                // Code to be measured.
            }
        }

Notes

Le nom utilisé pour identifier le marqueur du profileur est arbitraire. MRTK utilise le modèle suivant.

« [product] className.methodName - optional remarque »

Il est recommandé que les fournisseurs de données personnalisés suivent un modèle similaire pour simplifier l’identification de composants et de méthodes spécifiques lors de l’analyse des traces.

Créer le profil et l’inspecteur

Dans Mixed Reality Toolkit, les fournisseurs de données sont configurés à l’aide de profils.

Les fournisseurs de données avec des options de configuration supplémentaires (par exemple , InputSimulationService) doivent créer un profil et un inspecteur pour permettre aux clients de modifier le comportement en fonction des besoins de l’application.

Le code complet de l’exemple de cette section se trouve dans mrTK. Dossier Services/InputSimulation.

Définir le profil

Le contenu du profil doit miroir les propriétés accessibles de l’observateur (par exemple, intervalle de mise à jour). Toutes les propriétés configurables par l’utilisateur définies dans chaque interface doivent être contenues avec le profil.

[CreateAssetMenu(
    menuName = "Mixed Reality Toolkit/Profiles/Mixed Reality Simulated Input Profile",
    fileName = "MixedRealityInputSimulationProfile",
    order = (int)CreateProfileMenuItemIndices.InputSimulation)]
public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile
{ }

L’attribut CreateAssetMenu peut être appliqué à la classe de profil pour permettre aux clients de créer un profil instance à l’aide du menu Créer des > ressources > Mixed Reality Toolkit Profiles>.

Implémenter l’inspecteur

Les inspecteurs de profil sont l’interface utilisateur permettant de configurer et d’afficher le contenu du profil. Chaque inspecteur de profil doit étendre la classe BaseMixedRealityToolkitConfigurationProfileInspector .

[CustomEditor(typeof(MixedRealityInputSimulationProfile))]
public class MixedRealityInputSimulationProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector
{ }

L’attribut CustomEditor indique à Unity le type de ressource auquel l’inspecteur s’applique.

Créer une ou plusieurs définitions d’assembly

Mixed Reality Toolkit utilise des fichiers de définition d’assembly (.asmdef) pour spécifier des dépendances entre les composants et pour aider Unity à réduire le temps de compilation.

Il est recommandé de créer des fichiers de définition d’assembly pour tous les fournisseurs de données et leurs composants d’éditeur.

À l’aide de la structure de dossiers dans l’exemple précédent, il existe deux fichiers .asmdef pour le fournisseur de données ContosoInput.

La première définition d’assembly concerne le fournisseur de données. Pour cet exemple, il s’appelle ContosoInput et se trouve dans le dossier ContosoInput de l’exemple. Cette définition d’assembly doit spécifier une dépendance vis-à-vis de Microsoft.MixedReality.Toolkit et de tous les autres assemblys dont elle dépend.

La définition de l’assembly ContosoInputEditor spécifie l’inspecteur de profil et tout code spécifique à l’éditeur. Ce fichier doit se trouver dans le dossier racine du code de l’éditeur. Dans cet exemple, le fichier se trouve dans le dossier ContosoInput\Editor. Cette définition d’assembly contient une référence à l’assembly ContosoInput, ainsi que :

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

Inscrire le fournisseur de données

Une fois créé, le fournisseur de données peut être inscrit auprès du système d’entrée et être utilisé dans l’application.

Fournisseurs de données de système d’entrée inscrits

Emballage et distribution

Les fournisseurs de données distribués en tant que composants tiers ont les détails spécifiques de l’empaquetage et de la distribution laissés à la préférence du développeur. La solution la plus courante consistera probablement à générer un fichier .unitypackage et à le distribuer via unity Asset Store.

Si un fournisseur de données est envoyé et accepté dans le cadre du package Microsoft Mixed Reality Toolkit, l’équipe Microsoft MRTK le packagera et le distribuera dans le cadre des offres MRTK.

Voir aussi