Utilisation de Leap Motion et d’Ultraleap — MRTK2

Un contrôleur Leap Motion est nécessaire pour utiliser ce fournisseur de données.

Le fournisseur de données Leap Motion permet le suivi de la main articulé pour la réalité virtuelle et peut être utile pour le prototypage rapide dans l’éditeur. Le fournisseur de données peut être configuré pour utiliser le contrôleur Leap Motion monté sur un casque ou placé sur un bureau face vers le haut.

LeapMotionIntroGif

Ce fournisseur peut être utilisé dans l’éditeur et sur l’appareil sur la plateforme autonome. Il peut également être utilisé dans l’éditeur sur la plateforme UWP, mais PAS dans une build UWP.

MRTK Version Versions des modules Unity Leap Motion prises en charge
2.6.x 4.5.0, 4.5.1
2.7.0 - 2.7.2 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0
2.7.3 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0, 4.9.1 (voir la remarque ci-dessous)

Notes

Les modules Unity 4.9.1 nécessitent le service de suivi Gemini 5.2 ou version ultérieure. Le plug-in Unity V4.9.1 n’est officiellement pris en charge que sur Unity 2019. Consultez les notes de publication de la version 4.9.1.

Les modules Unity ont été renommés le plug-in Unity dans v5.0.0.

MRTK Version Versions du plug-in Unity Ultraleap prises en charge
2.8.0 5.3.0 (voir la remarque ci-dessous)

Notes

Les versions 5.0.0, 5.1.0 et 5.2.0 du plug-in Unity ne sont prises en charge dans aucune version de MRTK. Il est recommandé aux utilisateurs de mettre à niveau vers la version 5.3.0. Le plug-in Unity 5.3.0 nécessite le service de suivi Gemini 5.2 ou version ultérieure.

Utilisation du suivi de main Leap Motion (par Ultraleap) dans MRTK

  1. Importation de MRTK et des modules Unity Leap Motion / Plug-in Unity

    • Installez la dernière version du logiciel leap motion tracking pour obtenir le service de suivi s’il n’est pas déjà installé
    • Importez le package Microsoft.MixedReality.Toolkit.Foundation dans le projet Unity.
    • Télécharger et importer la dernière version des modules Unity Leap Motion / Plug-in Unity dans le projet
      • Pour les modules Unity : importez uniquement le package Core dans le projet
      • Pour le plug-in Unity : importez uniquement le package de suivi dans le projet. Seuls les .unitypackages sont pris en charge pour l’instant.

    Important

    Unity a déprécié SelectionMode.OnlyUserModifiable après Unity 2019.4.19, ce qui entraîne l’erreur suivante provenant du script Ultraleap Hotkeys.cs : Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91) : erreur CS0619 : 'SelectionMode.OnlyUserModifiable' est obsolète: ''OnlyUserModifiable' est obsolète. Utilisez « Modifiable » à la place. (UnityUpgradeable) -> Modifiable'.

    Pour résoudre les problèmes, remplacez SelectionMode.OnlyUserModifiable par SelectionMode.Editable dans le script Hotkeys.cs situé dans Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Intégrer les modules Unity Leap Motion / Plug-in Unity à MRTK

    • Une fois que les modules Unity/plug-in Unity sont dans le projet, accédez à Mixed Reality>Toolkit>Utilities>Leap Motion>Intégrer Les modules Unity Leap Motion.

    Notes

    L’intégration des modules Unity à MRTK ajoute 10 définitions d’assembly au projet et ajoute des références à la définition d’assembly Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Vérifiez que Visual Studio est fermé.

    LeapMotionIntegration

  3. Ajout du fournisseur de données Leap Motion

    • Créer une scène Unity
    • Ajoutez MRTK à la scène en accédant à Mixed Reality Toolkit>Ajouter à la scène et Configurer
    • Sélectionnez l’objet de jeu MixedRealityToolkit dans la hiérarchie, puis sélectionnez Copier et personnaliser pour cloner le profil de réalité mixte par défaut.

    LeapMotionProfileClone

    • Sélectionner le profil de configuration d’entrée

    Profil de configuration d’entrée 1

    • Sélectionnez Cloner dans le profil système d’entrée pour activer la modification.

    LeapMotionInputProfileClone

    • Ouvrez la section Fournisseurs de données d’entrée , sélectionnez Ajouter un fournisseur de données en haut. Un nouveau fournisseur de données sera ajouté à la fin de la liste. Ouvrez le nouveau fournisseur de données et définissez type surMicrosoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Add Data Provider

    • Sélectionnez Cloner pour modifier les paramètres leap motion par défaut.

    LeapDataProviderPreClone

    • Le fournisseur de données Leap Motion contient la LeapControllerOrientation propriété qui est l’emplacement du contrôleur Leap Motion. LeapControllerOrientation.Headset indique que le contrôleur est monté sur un casque. LeapControllerOrientation.Desk indique que le contrôleur est placé à plat sur le bureau. La valeur par défaut est définie sur LeapControllerOrientation.Headset.

    • Chaque orientation de contrôleur contient des propriétés de décalage :

      • Les propriétés de décalage d’orientation du casque miroir les propriétés de décalage dans le composant LeapXRServiceProvider. Le LeapVRDeviceOffsetMode a trois options : Par défaut, Décalage de la tête manuelle et Transformation. Si le mode de décalage est Par défaut, aucun décalage n’est appliqué au contrôleur Leap Motion. Le mode décalage manuel de la tête permet de modifier trois propriétés : LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ et LeapVRDeviceTiltX. Les valeurs de propriété de décalage d’axe sont ensuite appliquées au placement du contrôleur par défaut. Le mode de décalage de transformation contient la LeapVRDeviceOrigin propriété Transform qui spécifie une nouvelle origine pour le contrôleur Leap Motion.

      • L’orientation du bureau contient la LeapControllerOffset propriété qui définit la position d’ancrage des aiguilles de saut du bureau. Le décalage est calculé par rapport à la position de la caméra main et la valeur par défaut est (0,-0,2, 0,35) pour s’assurer que les mains apparaissent devant et en vue de la caméra.

        Notes

        Les propriétés de décalage dans le profil sont appliquées une fois au démarrage de l’application. Pour modifier les valeurs pendant l’exécution, obtenez le fournisseur de services Leap Motion à partir de l’Gestionnaire de périphériques Leap Motion :

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance et ExitPinchDistance sont les seuils de distance pour la détection des mouvements de pincement/d’air. Le mouvement de pincement est calculé en mesurant la distance entre l’extrémité de l’index et l’extrémité du pouce. Pour déclencher un événement on input down, la valeur par défaut EnterPinchDistance est 0.02. Pour déclencher un événement lors de l’entrée (sortie du pincement), la distance par défaut entre l’extrémité de l’index et l’extrémité du pouce est de 0,05.

    LeapControllerOrientation: Casque (par défaut)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Bureau

    LeapDeskGif

    LeapDeskInspector

  4. Test du fournisseur de données Leap Motion

    • Une fois que le fournisseur de données Leap Motion a été ajouté au profil système d’entrée, appuyez sur play, déplacez votre main devant le contrôleur Leap Motion. Vous devriez voir la représentation conjointe de la main.
  5. Création de votre projet

    • Accédez à Fichiers > Paramètres de génération
    • Seules les builds autonomes sont prises en charge si vous utilisez le fournisseur de données Leap Motion.
    • Pour obtenir des instructions sur l’utilisation d’un casque Windows Mixed Reality pour les builds autonomes, consultez Génération et déploiement de MRTK sur des casques WMR (autonome).

Obtention des articulations de la main

L’obtention de jointures à l’aide du fournisseur de données Leap Motion est identique à la récupération de jointure manuelle pour une main articulée MRTK. Pour plus d’informations, consultez Suivi des mains.

Avec MRTK dans une scène unity et le fournisseur de données Leap Motion ajouté en tant que fournisseur de données d’entrée dans le profil système d’entrée, créez un objet de jeu vide et joignez l’exemple de script suivant.

Ce script est un exemple simple montrant comment récupérer la pose de la paume dans une main leap motion. Une sphère suit la main Leap gauche tandis qu’un cube suit la main Leap droite.

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
using System.Collections.Generic;
using UnityEngine;

public class LeapHandJoints : MonoBehaviour, IMixedRealityHandJointHandler
{
    private GameObject leftHandSphere;
    private GameObject rightHandCube;

    private void Start()
    {
        // Register the HandJointHandler as a global listener
        CoreServices.InputSystem.RegisterHandler<IMixedRealityHandJointHandler>(this);

        // Create a sphere to follow the left hand palm position
        leftHandSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        leftHandSphere.transform.localScale = Vector3.one * 0.03f;

        // Create a cube to follow the right hand palm position
        rightHandCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        rightHandCube.transform.localScale = Vector3.one * 0.03f;
    }

    public void OnHandJointsUpdated(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
    {
        if (eventData.Handedness == Handedness.Left)
        {
            Vector3 leftHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            leftHandSphere.transform.position = leftHandPalmPosition;
        }

        if (eventData.Handedness == Handedness.Right)
        {
            Vector3 rightHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            rightHandCube.transform.position = rightHandPalmPosition;
        }
    }
}

Conseil de flux de travail de l’éditeur Unity

L’utilisation du fournisseur de données Leap Motion ne nécessite pas de casque VR. Les modifications apportées à une application MRTK peuvent être testées dans l’éditeur avec les mains Leap sans casque.

Les mains leap motion s’affichent dans l’éditeur, sans casque VR branché. Si est LeapControllerOrientation défini sur Casque, le contrôleur Leap Motion doit être maintenu par une main avec la caméra orientée vers l’avant.

Notes

Si la caméra est déplacée à l’aide des touches WASD dans l’éditeur et que le LeapControllerOrientation est Casque, les mains ne suivent pas la caméra. Les mains ne suivent le mouvement de la caméra que si un casque VR est branché alors que le LeapControllerOrientation est défini Casque. Les mains Leap suivent le mouvement de la caméra dans l’éditeur si est LeapControllerOrientation défini sur Desk.

Suppression de Leap Motion du projet

  1. Accédez au Mixed Reality Toolkit>Leap MotionSeparate Leap Motion> Modules Unity
    • Laissez Unity s’actualiser car les références dans le fichier Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef sont modifiées dans cette étape
  2. Fermer Unity
  3. Fermez Visual Studio, s’il est ouvert
  4. Ouvrez Explorateur de fichiers et accédez à la racine du projet MRTK Unity.
    • Supprimer le répertoire UnityProjectName/Library
    • Supprimer le répertoire UnityProjectName/Assets/Plugins/LeapMotion
    • Supprimer le fichier UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Rouvrir Unity

Dans Unity 2018.4, vous remarquerez peut-être que des erreurs restent dans la console après la suppression de la bibliothèque et des ressources de base Leap Motion. Si les erreurs sont journalisées après la réouverture, redémarrez Unity à nouveau.

Erreurs courantes

Leap Motion n’a pas été intégré à MRTK

Pour tester si les modules Unity Leap Motion ont été intégrés à MRTK :

  • Accédez à Mixed Reality Toolkit > Utilities Leap > Motion > Check Integration Status
    • Une fenêtre contextuelle s’affiche avec un message indiquant si les modules Unity Leap Motion ont été intégrés ou non à MRTK.
  • Si le message indique que les ressources n’ont pas été intégrées :
    • Vérifiez que les modules Unity Leap Motion se trouvent dans le projet
    • Vérifiez que la version ajoutée est prise en charge. Consultez le tableau en haut de la page pour connaître les versions prises en charge.
    • Essayer Mixed Reality Toolkit > Utilitaires > Leap Motion > Intégrer des modules Unity Leap Motion

Échec de la copie de l’assembly HLAPI multijoueur

Lors de l’importation des ressources core Unity Leap Motion, cette erreur peut être enregistrée :

Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed

Solution

Exemple de scène leap motion

L’exemple de scène utilise le profil DefaultLeapMotionConfiguration et détermine si le projet Unity a été correctement configuré pour utiliser le fournisseur de données Leap Motion.

L’exemple de scène est contenu dans le package Microsoft.MixedReality.Toolkit.Examples dans le répertoire MRTK/Examples/Demos/HandTracking/ .

Voir aussi