Uso de Leap Motion y Ultraleap: MRTK2
Se requiere un controlador de movimiento leap para usar este proveedor de datos.
El proveedor de datos Leap Motion permite el seguimiento de manos articulado para VR y podría ser útil para la creación rápida de prototipos en el editor. El proveedor de datos se puede configurar para usar el controlador de movimiento leap montado en un auricular o colocarlo en una cara hacia arriba del escritorio.
Este proveedor se puede usar en el editor y en el dispositivo mientras se encuentra en la plataforma independiente. También se puede usar en el editor mientras se encuentra en la plataforma para UWP, pero NO en una compilación para UWP.
Versión de MRTK | Versiones admitidas de los módulos de Leap Motion Unity |
---|---|
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 (consulte la nota siguiente) |
Nota
Los módulos de Unity 4.9.1 requieren el servicio de seguimiento DeGéminis 5.2 o superior. El complemento de Unity V4.9.1 solo se admite oficialmente en Unity 2019. Consulte las notas de la versión de la versión 4.9.1.
Los módulos de Unity cambiaron el nombre del complemento de Unity en V5.0.0.
Versión de MRTK | Versiones de complementos de Unity ultraleap compatibles |
---|---|
2.8.0 | 5.3.0 (consulte la nota siguiente) |
Nota
Las versiones 5.0.0, 5.1.0 y 5.2.0 del complemento de Unity no se admiten en ninguna versión de MRTK. Se recomienda que los usuarios actualicen a la versión 5.3.0. Unity Plugin 5.3.0 requiere el servicio de seguimiento DeGéminis 5.2 o superior.
Uso del seguimiento de manos de Leap Motion (by Ultraleap) en MRTK
Importación de MRTK y los módulos de Leap Motion Unity /Complemento de Unity
- Instale el software de seguimiento de movimiento de Leap más reciente para obtener el servicio de seguimiento si aún no está instalado.
- Importe Microsoft.MixedReality.Toolkit. Paquete foundation en el proyecto de Unity.
- Descargue e importe la versión más reciente de leap Motion Unity Modules /Unity Plugin en el proyecto.
- Para módulos de Unity: importe solo el paquete Core dentro del proyecto.
- Para el complemento de Unity: importe solo el paquete de seguimiento dentro del proyecto. Solo se admiten .unitypackages por ahora.
Importante
Unity ha quedado en desuso SelectionMode.OnlyUserModifiable después de Unity 2019.4.19, lo que produce el siguiente error procedente del script Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): error CS0619: 'SelectionMode.OnlyUserModifiable' está obsoleto: ''OnlyUserModifiable' está obsoleto. En su lugar, use "Editable". (UnityUpgradeable):> editable'.
Para resolver los problemas, cambie SelectionMode.OnlyUserModifiable a SelectionMode.Editable en el script Hotkeys.cs ubicado en Plugins/LeapMotion/Core/Editor/Hotkeys.cs.
Integración de leap Motion Unity Modules /Unity Plugin con MRTK
- Después de que los módulos de Unity o el complemento de Unity estén en el proyecto, vaya a Mixed Reality>Toolkit>Utilities>Leap Motion>Integrate Leap Motion Unity Modules.
Nota
La integración de los módulos de Unity en MRTK agrega 10 definiciones de ensamblado al proyecto y agrega referencias a Microsoft.MixedReality.Toolkit. Providers.LeapMotion, definición de ensamblado. Asegúrese de que Visual Studio esté cerrado.
Adición del proveedor de datos Leap Motion
- Cree una nueva escena de Unity
- Para agregar MRTK a la escena, vaya a Mixed Reality Toolkit>Agregar a escena y configurar.
- Seleccione el objeto de juego MixedRealityToolkit en la jerarquía y seleccione Copiar y personalizar para clonar el perfil de realidad mixta predeterminado.
- Seleccione el perfil de configuración de entrada .
- Seleccione Clonar en el perfil del sistema de entrada para habilitar la modificación.
- Abra la sección Proveedores de datos de entrada , seleccione Agregar proveedor de datos en la parte superior, se agregará un nuevo proveedor de datos al final de la lista. Abra el nuevo proveedor de datos y establezca El tipoen Microsoft.MixedReality.Toolkit. LeapMotion.Input > LeapMotionDeviceManager
- Seleccione Clonar para cambiar la configuración predeterminada de Leap Motion.
El proveedor de datos leap motion contiene la
LeapControllerOrientation
propiedad que es la ubicación del controlador de movimiento leap.LeapControllerOrientation.Headset
indica que el controlador está montado en un casco.LeapControllerOrientation.Desk
indica que el controlador se coloca plano en el escritorio. El valor predeterminado se establece enLeapControllerOrientation.Headset
.Cada orientación del controlador contiene propiedades de desplazamiento:
Las propiedades de desplazamiento de orientación de auriculares reflejan las propiedades de desplazamiento en el componente LeapXRServiceProvider. Tiene
LeapVRDeviceOffsetMode
tres opciones: Default, Manual Head Offset y Transform. Si el modo de desplazamiento es Predeterminado, no se aplicará un desplazamiento al controlador de movimiento leap. El modo desplazamiento manual de la cabeza permite la modificación de tres propiedades:LeapVRDeviceOffsetY
,LeapVRDeviceOffsetZ
yLeapVRDeviceTiltX
. A continuación, los valores de propiedad de desplazamiento del eje se aplican a la ubicación predeterminada del controlador. El modo de desplazamiento transformar contiene laLeapVRDeviceOrigin
propiedad Transform, que especifica un nuevo origen para el controlador de movimiento leap.La orientación desk contiene la
LeapControllerOffset
propiedad que define la posición de anclaje de las manos bisiestas del escritorio. El desplazamiento se calcula en relación con la posición principal de la cámara y el valor predeterminado es (0,-0,2, 0,35) para asegurarse de que las manos aparecen delante y en vista de la cámara.Nota
Las propiedades de desplazamiento del perfil se aplican una vez cuando se inicia la aplicación. Para modificar los valores durante el tiempo de ejecución, obtenga el proveedor de servicios Leap Motion del Administrador de dispositivos Leap Motion:
LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>(); LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider;
EnterPinchDistance
yExitPinchDistance
son los umbrales de distancia para la detección de gestos de pulsación de aire/pellizco. El gesto de reducir se calcula midiendo la distancia entre la punta del dedo índice y la punta del pulgar. Para generar un en el evento de entrada inactiva, el valor predeterminadoEnterPinchDistance
se establece en 0,02. Para generar un en el evento de entrada ascendente (saliendo del pellizco), la distancia predeterminada entre la punta del dedo índice y la punta del pulgar es 0,05.
LeapControllerOrientation
: Auriculares (valor predeterminado)LeapControllerOrientation
: EscritorioProbar el proveedor de datos leap motion
- Después de agregar leap Motion Data Provider al perfil del sistema de entrada, presione reproducir, mueva la mano delante del Controlador de movimiento leap y debería ver la representación conjunta de la mano.
Compilación del proyecto
- Vaya a File > Build Settings.
- Solo se admiten compilaciones independientes si se usa el proveedor de datos Leap Motion.
- Para obtener instrucciones sobre cómo usar un casco de Windows Mixed Reality para compilaciones independientes, consulte Building and deploying MRTK to WMR Headsets (Standalone).
Obtención de las articulaciones de la mano
La obtención de articulaciones mediante el proveedor de datos leap Motion es idéntica a la recuperación de la articulación manual para una mano articulada de MRTK. Para obtener más información, vea Seguimiento de manos.
Con MRTK en una escena de Unity y el proveedor de datos leap motion agregado como proveedor de datos de entrada en el perfil del sistema de entrada, cree un objeto de juego vacío y adjunte el siguiente script de ejemplo.
Este script es un ejemplo sencillo de cómo recuperar la posición de la articulación de la palma en una mano de movimiento bisiesto. Una esfera sigue a la mano izquierda leap mientras que un cubo sigue a la mano derecha de Leap.
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;
}
}
}
Sugerencia de flujo de trabajo del editor de Unity
El uso del proveedor de datos leap motion no requiere cascos vr. Los cambios en una aplicación MRTK se pueden probar en el editor con las manos Leap sin auriculares.
Las manos leap motion aparecerán en el editor, sin un casco vr conectado. Si se establece en LeapControllerOrientation
Headset, el controlador Leap Motion tendrá que mantenerse por una mano con la cámara orientada hacia adelante.
Nota
Si la cámara se mueve mediante teclas WASD en el editor y LeapControllerOrientation
es Headset, las manos no seguirán la cámara. Las manos solo seguirán el movimiento de la cámara si se conecta un casco VR mientras se establece headsetLeapControllerOrientation
. Las manos Leap seguirán el movimiento de la cámara en el editor si LeapControllerOrientation
está establecido en Desk.
Quitar Leap Motion de la Project
- Vaya a los módulos Mixed Reality Toolkit>Leap Motion>Separate Leap Motion Unity Modules
- Deje que Unity se actualice como referencias en Microsoft.MixedReality.Toolkit. El archivo Providers.LeapMotion.asmdef se modifica en este paso.
- Cerrar Unity
- Cierre Visual Studio, si está abierto
- Abra Explorador de archivos y vaya a la raíz del proyecto de Unity de MRTK.
- Eliminar el directorio UnityProjectName/Library
- Elimine el directorio UnityProjectName/Assets/Plugins/LeapMotion .
- Elimine el archivo UnityProjectName/Assets/Plugins/LeapMotion.meta .
- Volver a abrir Unity
En Unity 2018.4, es posible que observe que los errores siguen estando en la consola después de eliminar la biblioteca y los recursos de Leap Motion Core. Si se registran errores después de volver a abrirse, reinicie Unity de nuevo.
Errores comunes
Leap Motion no se ha integrado con MRTK
Para probar si los módulos leap Motion Unity se han integrado con MRTK:
- Vaya a Mixed Reality Toolkit > Utilities > Leap Motion Check Integration Status (Estado de integración de Leap Motion > Check)
- Se mostrará una ventana emergente con un mensaje sobre si los módulos Leap Motion Unity se han integrado o no con MRTK.
- Si el mensaje indica que los recursos no se han integrado:
- Asegúrese de que los módulos leap Motion Unity están en el proyecto.
- Asegúrese de que se admite la versión agregada, consulte la tabla de la parte superior de la página para ver las versiones admitidas.
- Pruebe Mixed Reality Toolkit > utilidades > Leap Motion > Integrate Leap Motion Unity Modules
Error al copiar el ensamblado HLAPI multijugador
Al importar los recursos principales de Leap Motion Unity, este error podría registrarse:
Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed
Solución
- Una solución a corto plazo consiste en reiniciar Unity. Consulte el problema 7761 para obtener más información.
Escena de ejemplo de leap Motion
La escena de ejemplo usa el perfil DefaultLeapMotionConfiguration y determina si el proyecto de Unity se ha configurado correctamente para usar el proveedor de datos Leap Motion.
La escena de ejemplo se encuentra en Microsoft.MixedReality.Toolkit. Paquete de ejemplos en el directorio MRTK/Examples/Demos/HandTracking/.