unity-game-engine - 使用 Kinect 和 OpenNI 在 Unity 中检测手势

标签 unity-game-engine kinect openni swipe-gesture

我的 Unity 项目中有一个 3D 模型,并且有一个 JavaScript 可以根据键盘箭头键(左/右)旋转相机。

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

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

我的设置: 我有 3 个 GameObjects:一个 3D 模型、一个 MainCamera 和一个定向光。

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

最佳答案

Zigfu 绑定(bind)(我假设您使用的是 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 帧开始,或大约半秒)

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

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

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

关于unity-game-engine - 使用 Kinect 和 OpenNI 在 Unity 中检测手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178476/

相关文章:

c# - Unity - 在 Update() 上减少/增加 "Z axis"角度轴

tensorflow - 如何在 TensorBoard 中解释 "Value Loss"图表?

opencv - 使用 Kinect 检测地板上的物体

emgucv - Emgu CV 和官方 Microsoft Kinect SDK?

c# - 通过电子邮件发送日志文件?统一

C# 2 个键和一个值

c# - Kinect 字节流太大

java - 从另一个线程访问值

video - Kinect - 录制和使用视频

c++ - 开始使用 OpenNI 编写 Kinect 应用程序