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.
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
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.
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.
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.
- Selezionare il profilo di configurazione di input
- Selezionare Clona nel profilo di sistema di input per abilitare la modifica.
- 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
- Selezionare Clona per modificare le impostazioni predefinite di Leap Motion.
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 suLeapControllerOrientation.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à:LeapVRDeviceOffsetY
eLeapVRDeviceOffsetZ
LeapVRDeviceTiltX
. I valori delle proprietà offset dell'asse vengono quindi applicati al posizionamento del controller predefinito. La modalità di offset Transform contiene laLeapVRDeviceOrigin
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
eExitPinchDistance
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 predefinitoEnterPinchDistance
è 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)LeapControllerOrientation
: DeskTest 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.
Creazione del progetto
- Passare a Compilazione file > Impostazioni
- Solo le compilazioni autonome sono supportate se si usa l'provider di dati Leap Motion.
- Per istruzioni su come usare un visore visore Windows Mixed Reality per le build autonome, vedere Compilazione e distribuzione di MRTK in visori visori WMR (Standalone).
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 LeapControllerOrientation
visore è 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
- 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
- Chiudere Unity
- Chiudere Visual Studio, se è aperto
- 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
- 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
- Una soluzione a breve termine consiste nel riavviare Unity. Per altre informazioni , vedere Problema 7761 .
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/.