我一直在使用提供的UnitySandbox项目对Leap Motion和Unity进行测试,我对LeapInput类的某些方面感到困惑。在使用C#和Unity 3D的Leap Motion中启用手势
我想使用C#委托和事件来将手势信息传递给另一个脚本。在LeapInput类中,注释说事件处理可以直接放在类中。但是,当我尝试在静态m_controller类上启用事件时,它们似乎没有注册。
然而,当我有一个单独的脚本,从MonoBehaviour继承声明,像这样的飞跃控制器类的一个实例:
using UnityEngine;
using System.Collections;
using Leap;
public class LeapToUnityInterface : MonoBehaviour {
Leap.Controller controller;
#region delegates
#endregion
#region events
#endregion
// Use this for initialization
void Start()
{
controller = new Controller();
controller.EnableGesture(Gesture.GestureType.TYPECIRCLE);
controller.EnableGesture(Gesture.GestureType.TYPEINVALID);
controller.EnableGesture(Gesture.GestureType.TYPEKEYTAP);
controller.EnableGesture(Gesture.GestureType.TYPESCREENTAP);
controller.EnableGesture(Gesture.GestureType.TYPESWIPE);
}
然后,当我为您在更新事件,他们似乎登记罚款:
// Update is called once per frame
void Update()
{
Frame frame = controller.Frame();
foreach (Gesture gesture in frame.Gestures())
{
switch(gesture.Type)
{
case(Gesture.GestureType.TYPECIRCLE):
{
Debug.Log("Circle gesture recognized.");
break;
}
case(Gesture.GestureType.TYPEINVALID):
{
Debug.Log("Invalid gesture recognized.");
break;
}
case(Gesture.GestureType.TYPEKEYTAP):
{
Debug.Log("Key Tap gesture recognized.");
break;
}
case(Gesture.GestureType.TYPESCREENTAP):
{
Debug.Log("Screen tap gesture recognized.");
break;
}
case(Gesture.GestureType.TYPESWIPE):
{
Debug.Log("Swipe gesture recognized.");
break;
}
default:
{
break;
}
}
}
}
我的问题是两个部分: 为什么,当我尝试启用在一个静态的开始或静态清醒静态m_controller事件,它没有成功? 为什么,当我在Leap.Controller事件类的一个实例上启用事件时,它是否成功(即,如何将该更改注册到与Leap交互的控制器?)?
这是否意味着你使用的是控制器实例,并获得controller.frame每次更新和处理这些数据?这与我目前所做的相似。我只是不清楚为什么在控制器实例中启用手势会导致一些全局变化?每个控制器实例是否继承自主控制器,然后更改其实例变量会改变他们从Leap设备收听的数据? – Christian
是的,这就是我正在做的。在我们的设置中,我们只有一个控制器。我不确定使用多个实例的价值是什么:) –