使用带有OpenNI的Kinect在Unity中检测手势划动

3

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

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

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

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

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

1个回答

4
Zigfu绑定(假设您正在使用版本1.4?)没有SwipeDetector示例,但它们包括SwipeDetector MonoBehaviour。 SwipeDetector检测垂直和水平滑动,但不幸的是不能检测滑动的速度。
您有几个选择:
1. 使用提供的Swipe Detector,并在每次检测到水平滑动(SwipeDetector_Left或SwipeDetector_Right事件)时按固定量旋转相机。 2. 使用提供的Swipe Detector,在Swipe上开始旋转,并在SwipeDetector_Release事件上停止旋转。这类似于按箭头键(假设您在keydown / keyup事件上具有相同的行为)。 3. 跟踪手部速度,并在发生滑动时检查其值。使用此值旋转相机。您可以通过创建新的MonoBehaviour并实现Hand_Create、Hand_Update和Hand_Destroy(查看HandpointControls文件夹中的任何脚本)来跟踪速度。保留最后n帧的手点队列。最新和最老点之间的差异将是这些n帧的速度(建议您从15帧或约半秒钟开始)。
(这将包含在未来的Zigfu版本中:))
您的游戏对象设置听起来正确-如果您没有看到任何日志,则可能没有正确执行“焦点手势”。尝试向传感器挥手或轻敲-这应该导致Hand_Create事件被调用。一旦您有一个有效的手部点,您应该从Swipe Detector获得正确的事件。
此外,值得一提的是,您的滑动检测游戏对象应具有HandPointControl组件(通过RequireComponent隐式添加),并且“ActiveOnStart”应为true。

感谢您抽出时间来撰写有帮助的回复!假设我使用第一种选项,如何“检测”滑动操作?我为您提供了更多有关我的问题的细节。 - Sagar Hatekar
快速问题:SwipeDetector_Left/Right的方法签名是什么? - Sagar Hatekar
嗨,@SagarHatekar,你最终解决了这个问题吗?很想知道如何让Zigfu滑动手势生效的任何额外提示。谢谢。 - ted.strauss
1
嗨@ted.strauss,我没有,放弃了:(抱歉。 - Sagar Hatekar
@ShlomoZippel,你是否考虑过发布一些代码片段,以便对应你所描述的某个方法?#2的代码将是很棒的。 - ted.strauss
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接