使用Kinect和OpenNI在Unity中检测手部滑动手势

时间:2012-02-07 14:58:44

标签: unity3d kinect openni swipe-gesture

我在Unity项目中有一个3D模型,我有一个基于键盘箭头键(左/右)旋转相机的JavaScript。

现在,我需要一个脚本来检测水平滑动手势并返回一个我用来旋转相机的矢量。

我正在使用带有PrimeSense OpenNI / NITE的ZigFu SDK。 ZigFu SDK附带了示例脚本,其中一个是SwipeDetector - 我想知道它是如何工作的?

我的设置: 我有3 GameObjects:3D模型,MainCamera和Directional Light。

那么,我如何在项目中使用SwipeDetector脚本?我现在这样做的方法是1)创建一个空的游戏对象“SwipeDetection”,2)从ZigFu“拖放”SwipeDetector脚本。我在SwipeDetector脚本中添加了日志,但是我没有看到它们。

1 个答案:

答案 0 :(得分:4)

Zigfu绑定(我假设您使用的是1.4版本?)没有SwipeDetector示例,但它们包含SwipeDetector MonoBehaviour。 SwipeDetector检测垂直和水平滑动,但遗憾的是没有检测到滑动的速度。

您有几个选择:

  1. 使用提供的扫描检测器,每次检测到水平滑动时,将相机旋转固定量(SwipeDetector_Left或SwipeDetector_Right事件)

  2. 使用提供的滑动探测器,在滑动时开始旋转,并在SwipeDetector_Release事件上停止旋转。这类似于按下箭头键(假设你在keydown / keyup事件上有相同的行为)

  3. 跟踪手部速度,并在滑动时检查其值。使用此值可旋转相机。您可以通过创建新的MonoBehaviour并实现Hand_Create,Hand_Update和Hand_Destroy(查看HandpointControls文件夹中的任何脚本)来跟踪速度。使用最后n帧中的手点保持队列。最新和最新的差异这些n帧的最高点将是你的速度(我建议你从15帧开始,或大约半秒钟)

  4. (这将包含在未来的Zigfu版本中:))

    您的游戏对象设置听起来正确 - 如果您没有看到任何日志,则可能无法正确执行“焦点手势”。尝试向传感器挥手或敲击 - 这应该会导致调用Hand_Create事件。获得有效的手持点后,您应该从滑动检测器中获取正确的事件。

    另外值得一提的是,您的滑动检测游戏对象应该有一个HandPointControl组件(使用RequireComponent隐式添加),并且'ActiveOnStart'应该为true。