Cómo conectar Leap Motion con Unity 3D
1. Descargue el SDK de Leap para Unity.
El SDK de Leap para Unity se utiliza como una biblioteca de complementos para obtener datos de Leap, pero la versión gratuita de U3D no admite complementos nativos. También hay una manera en el Centro de desarrolladores de habilitar la versión gratuita de U3D para usar el SDK de salto.
2. Primero cree un nuevo proyecto de Unity
3. Cree una nueva carpeta de complementos en el directorio raíz del proyecto y busque ~/LeapSDK/lib/UnityAssets en el SDK descargado (/). descargas) /Plugins, coloque el contenido dentro de la carpeta Plugins. Luego busque ~/Examples/UnitySandbox/Assets/Scripts/Leap/LeapUnityExtensions.cs y cópielo en la carpeta Complementos. En este momento, debería haber LeapCSharp.bundle, LeapCSharp.NET3.5.dll y LeapUnityExtensions.cs en los complementos. En este punto, el SDK está listo, lo cual es muy conveniente.
4. Cree un plano y un cubo (para movimiento) en la escena.
5. Cree un nuevo script cs en complementos, asígnele el nombre LDCLeapControl.cs y agregue el siguiente código. al IDE:
usando?UnityEngine;
usando?System.Collections;
usando?System.Collections.Generic;
usando?Leap
público?static?class?LDCLeapControl
{
público?static?float?ROTATE_MOD?=?3.14F;
/ /member?variables;
static?Leap.Controller?_controller;
static?Leap.Frame?_frame;
static?Leap. ¿Mano?_hand;
static?LDCLeapControl()
{
_controller?=?new?Leap.Controller();
}
//getters
public?static?Leap.Frame?Frame
{
obtener
{
return?_frame;
}
}
público?estático?Leap.Hand?Hand
{ p>
obtener
{
devolver?_hand;
}
}
// get?latest?frame?llamado?cada?segundo
public?static?void?Update?()?
{
if( _controller?!= ?null)
{
Marco?lastFrame?=?_frame?==?null?Frame.Invalid?:?_frame;
_frame?=? _controller.Frame();
if(_frame?!=?null)
{
if(_frame.Hands.Count?> ?0)
{
_hand?=?_frame.Hands[0];
}
}
}
}
public?static?float?getHandInput(string?gesture)
{
float?leapData?= ?getLeapData(gesto);
retorno?leapData;
}
privado?estático?float?getLeapData(cadena?gesto)
{ p>
Actualizar();
float?leapData?=?0.0F;
if(_hand?!=?null)
{
Vector3?PalmPosition?=?nuevo?Vector3(0,0,0);
Vector3?PalmNormal?=?nuevo?Vector3(0,0,0) ;
Vector3?PalmDirectio
n?=?new?Vector3(0,0,0);
PalmPosition?=?_hand.PalmPosition.ToUnityTranslated();
PalmNormal?=?_hand.PalmNormal.ToUnity ();
PalmDirection?=?_hand.PalmPosition.ToUnity();
if(gesto?==?"Rotación")
{ p>
leapData?=?-ROTATE_MOD?*?PalmNormal.x;
}
}
return?leapData;
}
} ?
6. En este momento, podemos utilizar LDCLeapControl como complemento nativo. Cree un nuevo script en Assets: moveBehaviour.cs y agregue el. siguiente código:
usando?UnityEngine;
usando?System.Collections;
public?class?moveBehaviour?:?MonoBehaviour?{
public?float?smooth?=?2.0f;
public?float?tiltAngle?=?60.0f;
public?bool?leapIsEnabled?=?false; p>
¿vacío? ¿Actualizar?()?
{
if(leapIsEnabled)
{
¿flotar?rotar? =? LDCLeapControl.getHandInput("Rotación");
float?tiltAroundY?=?rotate?*?tiltAngle;
Quaternion?target?=?Quaternion.Euler(0,? tiltAroundY, ?0);
transformar.rotación?=?Quaternion.Slerp(transformar.rotación,?objetivo,?Tiempo.deltaTime?*?smooth);
}?
}
} ?
Aquí, los datos de salto obtenidos se utilizan como el valor del cuaternión de la rotación del objeto (lo mismo se aplica al movimiento de posición y otras transformaciones, omitido) , y el comportamiento se paga al cubo (activa el interruptor de saltoIsEnabled), corre y ahora, a medida que tu muñeca gira hacia la izquierda y hacia la derecha, el bloque también girará en la dirección y.