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.
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
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.
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.
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.
- Selezionare il profilo di configurazione dell'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. 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
- Selezionare Clona per modificare le impostazioni predefinite di Leap Motion.
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 suLeapControllerOrientation.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à:LeapVRDeviceOffsetY
eLeapVRDeviceOffsetZ
LeapVRDeviceTiltX
. I valori delle proprietà dell'offset dell'asse vengono quindi applicati al posizionamento predefinito del controller. La modalità offset Transform contiene laLeapVRDeviceOrigin
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
eExitPinchDistance
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 predefinitoEnterPinchDistance
è 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)LeapControllerOrientation
:ScrivaniaTest 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.
Compilazione del progetto
- Passare a Impostazioni di compilazione file >
- Se si usa il provider di dati Leap Motion, sono supportate solo le build autonome.
- Per istruzioni su come usare un visore VR Windows Mixed Reality per le build autonome, vedere Compilazione e distribuzione di MRTK in visori VR WMR (Standalone).For instructions on how to use a Windows Mixed Reality headset for Standalone build, see Building and deploying MRTK to WMR Headsets (Standalone).
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 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 progetto
- 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
- 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 > 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
- 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 il provider di dati Leap Motion.
La scena di esempio è contenuta nel pacchetto Microsoft.MixedReality.Toolkit.Examples nella directory MRTK/Examples/Demos/HandTracking/.