Uso di Leap Motion e Ultraleap — MRTK2

Per usare questo provider di dati è necessario un controller di movimento Leap .

La provider di dati Leap Motion consente il rilevamento delle mani articolato per VR e può essere utile per la prototipazione rapida nell'editor. Il provider di dati può essere configurato per usare il controller di movimento Leap montato su un visore o posizionato su una scrivania.

LeapMotionIntroGif

Questo provider può essere usato nell'editor e nel dispositivo mentre si trova nella piattaforma autonoma. Può essere usato anche nell'editor durante la piattaforma UWP, ma NON in una compilazione UWP.

Versione MRTK Versioni dei moduli di Leap Motion Unity supportate
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 (vedere la nota seguente)

Nota

I moduli Unity 4.9.1 richiedono il servizio di rilevamento Gemini 5.2 o versione successiva. Il plug-in Unity V4.9.1 è supportato ufficialmente in Unity 2019. Vedere note sulla versione per 4.9.1.

I moduli Unity sono stati rinominati il plug-in Unity in V5.0.0.

Versione MRTK Versioni del plug-in Di Unity Ultraleap supportate
2.8.0 5.3.0 (vedere la nota riportata di seguito)

Nota

I plug-in Unity versione 5.0.0, 5.1.0 e 5.2.0 non sono supportati in alcuna versione di MRTK. Gli utenti sono consigliati per l'aggiornamento alla versione 5.3.0. Il plug-in Unity 5.3.0 richiede il servizio di rilevamento Gemini 5.2 o versione successiva.

Uso del movimento Leap (by Ultraleap) rilevamento delle mani in MRTK

  1. Importazione di MRTK e dei moduli Leap Motion Unity /Plug-in Unity

    • Installare il software di Rilevamento movimento Leap più recente per ottenere il servizio di rilevamento se non è già installato
    • Importare Microsoft.MixedReality.Toolkit. Pacchetto di base nel progetto Unity.
    • Scaricare e importare la versione più recente dei moduli Leap Motion Unity /Plug-in Unity nel progetto
      • Per i moduli Unity: importare solo il pacchetto Core all'interno del progetto
      • Per Plug-in Unity: importare solo il pacchetto Di rilevamento all'interno del progetto. Solo i pacchetti unity sono supportati per il momento.

    Importante

    Unity deprecato SelectionMode.OnlyUserModifiable dopo Unity 2019.4.19 che genera l'errore seguente proveniente dallo script Hotkeys.cs ultraleap: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24.91): errore CS0619: 'SelectionMode.OnlyUserModifiable' è obsoleto: 'OnlyUserModifiable' è obsoleto. Usare invece 'Modificabile'. (UnityUpgradeable) -> Modificabile'.

    Per risolvere i problemi, modificare lo script SelectionMode.OnlyUserModifiable in SelectionMode.Editable nello script Hotkeys.cs disponibile in Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrare i moduli Leap Motion Unity /Plug-in Unity con MRTK

    • Dopo aver eseguito il plug-in Unity Modules/Unity, passare a Realtà mista>Toolkit>Utilities>Leap MotionIntegrate Leap Motion> Unity Modules.

    Nota

    L'integrazione dei moduli Unity a MRTK aggiunge 10 definizioni di assembly al progetto e aggiunge riferimenti a Microsoft.MixedReality.Toolkit. Definizione dell'assembly Providers.LeapMotion. Verificare che Visual Studio sia chiuso.

    LeapMotionIntegration

  3. Aggiunta dell'provider di dati Leap Motion

    • Creare una nuova scena di Unity
    • Aggiungere MRTK alla scena passando a Realtà mista Toolkit>Aggiungi alla scena e Configura
    • Selezionare l'oggetto gioco MixedRealityToolkit nella gerarchia e selezionare Copia e Personalizza per clonare il profilo di realtà mista predefinito.

    LeapMotionProfileClone

    • Selezionare il profilo di configurazione di input

    Input Configuration Profile 1

    • Selezionare Clona nel profilo di sistema di input per abilitare la modifica.

    LeapMotionInputProfileClone

    • Aprire la sezione Provider di dati di input, selezionare Aggiungi provider di dati nella parte superiore, verrà aggiunto un nuovo provider di dati alla fine dell'elenco. Aprire il nuovo provider di dati e impostare Il tipo su Microsoft.MixedReality.Toolkit. LeapMotion.Input > LeapMotionDeviceManager

    Leap Add Data Provider

    • Selezionare Clona per modificare le impostazioni predefinite di Leap Motion.

    LeapDataProviderPreClone

    • Il Leap Motion provider di dati contiene la proprietà che rappresenta la LeapControllerOrientation posizione del controller di movimento Leap. LeapControllerOrientation.Headset indica che il controller è montato su un visore visore. LeapControllerOrientation.Desk indica che il controller è posizionato flat sulla scrivania. Il valore predefinito è impostato su LeapControllerOrientation.Headset.

    • Ogni orientamento del controller contiene proprietà di offset:

      • Le proprietà di offset dell'orientamento visore rispecchiano le proprietà di offset nel componente LeapXRServiceProvider. Sono LeapVRDeviceOffsetMode disponibili tre opzioni: Offset predefinito, Offset head manuale e trasformazione. Se la modalità di offset è Predefinita, un offset non verrà applicato al controller di movimento Leap. La modalità Offset head manuale consente la modifica di tre proprietà: LeapVRDeviceOffsetYe LeapVRDeviceOffsetZLeapVRDeviceTiltX. I valori delle proprietà offset dell'asse vengono quindi applicati al posizionamento del controller predefinito. La modalità di offset Transform contiene la LeapVRDeviceOrigin proprietà Transform che specifica una nuova origine per il controller di movimento Leap.

      • L'orientamento Desk contiene la proprietà che definisce la LeapControllerOffset posizione di ancoraggio delle mani del salto della scrivania. L'offset viene calcolato rispetto alla posizione principale della fotocamera e il valore predefinito è (0,-0,2, 0,35) per assicurarsi che le mani vengano visualizzate davanti e in vista della fotocamera.

        Nota

        Le proprietà di offset nel profilo vengono applicate una volta all'avvio dell'applicazione. Per modificare i valori durante il runtime, ottenere il provider di servizi Leap Motion dall'Gestione dispositivi Leap Motion:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance e ExitPinchDistance sono le soglie di distanza per il rilevamento dei movimenti di tocco pizzica/aria. Il movimento di pizzicamento viene calcolato misurando la distanza tra la punta del dito dell'indice e la punta del pollice. Per generare un evento in base all'input down, il valore predefinito EnterPinchDistance è impostato su 0.02. Per generare un evento su input up (uscita dal pizzicamento), la distanza predefinita tra la punta del dito dell'indice e la punta del pollice è 0,05.

    LeapControllerOrientation: visore (impostazione predefinita)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation: Desk

    LeapDeskGif

    LeapDeskInspector

  4. Test della provider di dati del movimento Leap

    • Dopo l'aggiunta di leap motion provider di dati al profilo di sistema di input, premere play, spostare la mano davanti al controller di movimento Leap e si dovrebbe visualizzare la rappresentazione congiunta della mano.
  5. Creazione del progetto

Ottenere le articolazioni della mano

Ottenere le articolazioni usando l'provider di dati Leap Motion è identico al recupero delle articolazioni a mano per una mano articolata MRTK. Per altre informazioni, vedere Rilevamento mano.

Con MRTK in una scena unity e il Leap Motion provider di dati aggiunto come input provider di dati nel profilo del sistema di input, creare un oggetto gioco vuoto e collegare lo script di esempio seguente.

Questo script è un semplice esempio di come recuperare la posa del palmo in una mano di movimento Leap. Una sfera segue la mano del salto sinistro mentre un cubo segue la mano del salto destro.

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

Suggerimento del flusso di lavoro dell'editor di Unity

L'uso della provider di dati Leap Motion non richiede un visore VR. Le modifiche a un'app MRTK possono essere testate nell'editor con le mani Leap senza visore.

Le mani del movimento Leap verranno visualizzate nell'editor, senza un visore VR collegato. Se l'oggetto LeapControllerOrientation è impostato su Visore visore, il controller Leap Motion dovrà essere mantenuto da una mano con la fotocamera in avanti.

Nota

Se la fotocamera viene spostata usando chiavi WASD nell'editor e il LeapControllerOrientationvisore è visore, le mani non seguiranno la fotocamera. Le mani seguiranno solo lo spostamento della fotocamera se un visore VR è collegato mentre è LeapControllerOrientation impostato visore visore. Le mani Leap seguiranno lo spostamento della fotocamera nell'editor se l'oggetto LeapControllerOrientation è impostato su Desk.

Rimozione del movimento Leap dal Project

  1. Passare ai moduli di Unity di Unitàdi movimento separati dal movimento di Realtà mista Toolkit>Leap>
    • Consentire l'aggiornamento di Unity come riferimenti in Microsoft.MixedReality.Toolkit. Il file Providers.LeapMotion.asmdef viene modificato in questo passaggio
  2. Chiudere Unity
  3. Chiudere Visual Studio, se è aperto
  4. Aprire Esplora file e passare alla radice del progetto MRTK Unity
    • Eliminare la directory UnityProjectName/Library
    • Eliminare la directory UnityProjectName/Assets/Plugins/LeapMotion
    • Eliminare il file UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Riaprire Unity

In Unity 2018.4 è possibile notare che gli errori rimangono ancora nella console dopo l'eliminazione della libreria e degli asset di Leap Motion Core. Se gli errori vengono registrati dopo la riapertura, riavviare di nuovo Unity.

Errori comuni

Leap Motion non è integrato con MRTK

Per testare se i moduli Leap Motion Unity sono integrati con MRTK:

  • Passare a Realtà mista Toolkit > Utilità > Leap Motion > Check Integration Status
    • Verrà visualizzata una finestra popup con un messaggio relativo al fatto che i moduli Leap Motion Unity siano integrati con MRTK.
  • Se il messaggio indica che gli asset non sono stati integrati:
    • Assicurarsi che i moduli Leap Motion Unity siano presenti nel progetto
    • Assicurarsi che la versione aggiunta sia supportata, vedere la tabella nella parte superiore della pagina per le versioni supportate.
    • Provare Realtà mista Toolkit > utilità > Leap Motion > Integrate Leap Motion Unity modules

Impossibile copiare l'assembly Multiplayer HLAPI

Se si importano gli asset core di Leap Motion Unity, questo errore potrebbe essere registrato:

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

Soluzione

Scena di esempio di movimento leap

La scena di esempio usa il profilo DefaultLeapMotionConfiguration e determina se il progetto Unity è stato configurato correttamente per usare l'provider di dati Leap Motion.

La scena di esempio è contenuta in Microsoft.MixedReality.Toolkit. Esempi di pacchetto nella directory MRTK/Examples/Demos/HandTracking/.

Vedi anche