Uso de Leap Motion

Se requiere un controlador leap motion 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 leap motion montado en un casco o colocado en un escritorio cara arriba.

LeapMotionIntroGif

Este proveedor se puede usar en el editor y en el dispositivo en la plataforma independiente. También se puede usar en el editor mientras está en la plataforma para UWP, pero NO en una compilación de UWP.

Versión de MRTK Versiones de módulos de Unity leap motion admitidas
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 (vea la nota siguiente)

Nota

Los módulos de Unity 4.9.1 requieren el servicio de seguimiento Der 5.2 o superior, y solo se admiten oficialmente en Unity 2019. Consulte las notas de la versión para la versión 4.9.1.

Uso del seguimiento manual de Leap Motion (por Ultraleap) en MRTK

  1. Importación de MRTK y los módulos leap motion de Unity

    • Instale el software leap motion tracking 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.
    • Descarga e importación de la versión más reciente de los módulos de Unity leap motion en el proyecto
      • Importar solo el paquete Principal dentro de los módulos de Unity

    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.

  2. Integración de los módulos de Unity de Leap Motion con MRTK

    • Una vez que los módulos de Unity estén en el proyecto, vaya a Mixed Reality ToolkitLeap Motion Integrate Leap Motion Unity Modules (Integraciónde Leap Motion en módulos de Unity).

    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. Definición del ensamblado Providers.LeapMotion. Asegúrese de que Visual Studio esté cerrado.

    LeapMotionIntegration

  3. Agregar el proveedor de datos Leap Motion

    • Creación de una escena de Unity
    • Para agregar MRTK a la escena, vaya a Mixed Reality ToolkitAgregar a la 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.

    LeapMotionProfileClone

    • Selección del perfil de configuración de entrada

    Perfil de configuración de entrada 1

    • Seleccione Clonar en el perfil del sistema de entrada para habilitar la modificación.

    LeapMotionInputProfileClone

    • Abra la sección Proveedores de datos de entrada, seleccione Agregar proveedor de datos en la parte superior y se agregará un nuevo proveedor de datos al final de la lista. Abra el nuevo proveedor de datos y establezca El tipo en Microsoft.MixedReality.Toolkit. LeapMotion.Input LeapMotionDeviceManager

    Leap Add Data Provider

    • Seleccione Clonar para cambiar la configuración predeterminada de Leap Motion.

    LeapDataProviderPreClone

    • El proveedor de datos Leap Motion contiene LeapControllerOrientation la propiedad que es la ubicación del controlador leap motion. LeapControllerOrientation.Headset indica que el controlador está montado en un casco. LeapControllerOrientation.Desk indica que el controlador se coloca plano sobre el escritorio. El valor predeterminado se establece en LeapControllerOrientation.Headset .

    • Cada orientación del controlador contiene propiedades de desplazamiento:

      • Las propiedades de desplazamiento de orientación del casco reflejan las propiedades de desplazamiento en el componente LeapXRServiceProvider. tiene LeapVRDeviceOffsetMode tres opciones: Predeterminada, Desplazamiento manual de la cabeza y Transformación. 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 y LeapVRDeviceOffsetZLeapVRDeviceTiltX . A continuación, los valores de las propiedades de desplazamiento del eje se aplican a la ubicación predeterminada del controlador. El modo de desplazamiento Transformar contiene la LeapVRDeviceOrigin propiedad Transform que especifica un nuevo origen para leap motion controller.

      • La orientación desk contiene la propiedad que define la posición delimitadora de las manos bisiesta del escritorio. El desplazamiento se calcula en relación con la posición de la cámara principal y el valor predeterminado es (0,-0,2, 0,35) para asegurarse de que las manos aparecen delante y a la 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 desde la página Leap Motion Administrador de dispositivos:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance y ExitPinchDistance son los umbrales de distancia para la detección de gestos de pulsar y pulsar en el aire. El gesto de acercamiento se calcula midiendo la distancia entre la punta del dedo índice y la punta del dedo. Para generar un evento de entrada hacia abajo, el valor EnterPinchDistance predeterminado se establece en 0,02. Para generar un evento de entrada arriba (salir de la acción de acercamiento), la distancia predeterminada entre la punta del dedo índice y la punta del dedo es 0,05.

    LeapControllerOrientation: casco (valor predeterminado) LeapControllerOrientation: Desk
    LeapHeadsetGif LeapDeskGif
    LeapHeadsetInspector LeapDeskInspector
  4. Prueba del proveedor de datos Leap Motion

    • Una vez agregado el proveedor de datos leap motion al perfil del sistema de entrada, presione play, mueva la mano delante del leap motion controller y debería ver la representación conjunta de la mano.
  5. Creación del proyecto

    • Vaya a File Build Configuración
    • Solo se admiten compilaciones independientes si se usa el proveedor de datos Leap Motion.
    • Para obtener instrucciones sobre cómo usar un casco Windows Mixed Reality para compilaciones independientes, consulte Compilación e implementación de MRTK en cascos WMR (independientes).

Obtención de las uniones de mano

La obtención de uniones mediante el proveedor de datos Leap Motion es idéntica a la recuperación conjunta manual para una mano articulada de MRTK. Para obtener más información, vea Hand Tracking.

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 coyuntura de la mano de la mano de movimiento bisiesto. Una esfera sigue a la mano leap izquierda, mientras que un cubo sigue a la mano leap derecha.

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 un casco de realidad virtual. Los cambios en una aplicación MRTK se pueden probar en el editor con las manos leap sin casco.

Las manos leap motion se mostrarán en el editor, sin un casco de realidad virtual conectado. Si está establecido en Casco, el controlador Leap Motion tendrá que mantener el control Leap Motion con una mano con la LeapControllerOrientation cámara orientada hacia delante. LeapControllerOrientation

Nota

Si la cámara se mueve mediante claves WASD en el editor y es Casco , las manos LeapControllerOrientation no seguirán a la cámara. LeapControllerOrientation Las manos solo seguirán el movimiento de la cámara si un casco vr está conectado mientras LeapControllerOrientation está establecido el LeapControllerOrientation. Las manos bisiesta seguirán el movimiento de la cámara en el editor si LeapControllerOrientation está establecido en LeapControllerOrientation.

Quitar Leap Motion del Project

  1. Vaya a los módulosde Unity Mixed Reality Toolkit Leap MotionSeparate Leap Motion
    • Deje que Unity se actualice como referencias en Microsoft.MixedReality.Toolkit. El archivo Providers.LeapMotion.asmdef se modifica en este paso
  2. Cerrar Unity
  3. Cierre Visual Studio, si está abierto
  4. Abra Explorador de archivos y vaya a la raíz del proyecto de Unity de MRTK.
    • Eliminación del directorio UnityProjectName/Library
    • Eliminación del directorio UnityProjectName/Assets/Plugins/LeapMotion
    • Elimine el archivo UnityProjectName/Assets/Plugins/LeapMotion.meta.
  5. Volver a abrir Unity

En Unity 2018.4, es posible que observe que los errores permanecen en la consola después de eliminar la biblioteca y los recursos principales de Leap Motion. Si se registran errores después de volver a abrir, reinicie Unity de nuevo.

Errores comunes

Leap Motion no se ha integrado con MRTK

Para probar si los módulos de Unity leap motion se han integrado con MRTK:

  • Vaya a Mixed Reality Toolkit Utilities Leap Motion Check Integration Status (Estado de integración de Leap Motion Check de >> utilidades).
    • Se mostrará una ventana emergente con un mensaje sobre si los módulos de Unity leap motion se han integrado con MRTK o no.
  • Si el mensaje indica que los recursos no se han integrado:
    • Asegúrese de que los módulos leap motion de Unity están en el proyecto.
    • Asegúrese de que se admite la versión agregada, consulte la tabla en la parte superior de la página para ver las versiones admitidas.
    • Pruebe a Mixed Reality Toolkit Utilities Leap Motion Integrate Leap Motion Unity >> Modules

Error al copiar HLAPI multijugador de ensamblado

Al importar los recursos principales de Unity De Leap Motion, 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 es 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/.

Vea también