Share via


Uso di Leap Motion e Ultraleap - MRTK2

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

Leap Motion Data Provider consente il tracciamento manuale articolato per la realtà virtuale e può essere utile per la creazione rapida di prototipi nell'editor. Il provider di dati può essere configurato per l'uso di Leap Motion Controller montato su un visore VR o posizionato su una scrivania.

LeapMotionIntroGif

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

Versione di MRTK Versioni dei moduli Unity Leap Motion 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 solo in Unity 2019. Vedere le note sulla versione per la versione 4.9.1.

I moduli Unity sono stati rinominati il plug-in Unity nella versione 5.0.0.

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

Nota

Le versioni del plug-in Unity 5.0.0, 5.1.0 e 5.2.0 non sono supportate in alcuna versione di MRTK. È consigliabile eseguire 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 rilevamento manuale Leap Motion (di Ultraleap) in MRTK

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

    • Installare la versione più recente di Leap Motion Tracking Software per ottenere il servizio di rilevamento, se non è già installato
    • Importare il pacchetto Microsoft.MixedReality.Toolkit.Foundation nel progetto Unity.
    • Scaricare e importare la versione più recente del plug-in Unity Leap Motion nel progetto
      • Per i moduli Unity: importare solo il pacchetto Core all'interno del progetto
      • Per il plug-in Unity: importare solo il pacchetto di rilevamento all'interno del progetto. Per il momento sono supportati solo i pacchetti unity.

    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 SelectionMode.OnlyUserModifiable in SelectionMode.Editable nello script Hotkeys.cs disponibile in Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrare il plug-in Unity Leap Motion /Unity con MRTK

    • Dopo che il plug-in Unity Modules/Unity è presente nel progetto, passare a Realtà mista>Toolkit>Utilities>Leap MotionIntegrate Leap Motion Unity Modules (Utilità Leap Motion Integrate Leap Motion> Unity Modules).

    Nota

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

    LeapMotionIntegration

  3. Aggiunta del provider di dati Leap Motion

    • Creare una nuova scena 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 dell'input

    Profilo di configurazione di input 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. Alla fine dell'elenco verrà aggiunto un nuovo provider di dati. Aprire il nuovo provider di dati e impostare Type su Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Add Data Provider

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

    LeapDataProviderPreClone

    • Leap Motion Data Provider contiene la LeapControllerOrientation proprietà che rappresenta la posizione di Leap Motion Controller. LeapControllerOrientation.Headset indica che il controller è montato su un visore VR. LeapControllerOrientation.Desk indica che il controller è posizionato piatto sulla scrivania. Il valore predefinito è impostato su LeapControllerOrientation.Headset.

    • Ogni orientamento del controller contiene proprietà di offset:

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

      • L'orientamento della scrivania contiene la LeapControllerOffset proprietà che definisce la posizione di ancoraggio delle mani di 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 dal 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 avvicinamento delle dita/dell'aria. Il movimento di avvicinamento delle dita viene calcolato misurando la distanza tra la punta del dito indice e la punta del pollice. Per generare un evento di input down, il valore predefinito EnterPinchDistance è 0.02. Per generare un evento di input su (uscita dal pizzicamento), la distanza predefinita tra la punta del dito dell'indice e la punta del pollice è 0,05.

    LeapControllerOrientation: visore VR (impostazione predefinita)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Scrivania

    LeapDeskGif

    LeapDeskInspector

  4. Test del provider di dati Leap Motion

    • Dopo che Leap Motion Data Provider è stato aggiunto al profilo di sistema di input, premere play, spostare la mano davanti a Leap Motion Controller e dovrebbe essere visualizzata la rappresentazione congiunta della mano.
  5. Compilazione del progetto

Ottenere le articolazioni della mano

Ottenere articolazioni usando leap motion data provider è identico al recupero delle articolazioni della mano per una mano articolata MRTK. Per altre informazioni, vedere Tracciamento manuale.

Con MRTK in una scena unity e il provider di dati Leap Motion aggiunto come provider di dati di input nel profilo Di sistema di input, creare un oggetto gioco vuoto e allegare 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 del provider di dati Leap Motion Data 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 progetto

  1. Passare ai moduli di Unity unity di Realtà mista Toolkit>Leap>Separate Motion Leap
    • Consentire l'aggiornamento di Unity come riferimenti nel file Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef 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 > Utilities > 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 > Utilities > 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 il provider di dati Leap Motion.

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

Vedi anche