使用或创建手势

有两种方法可以将手势识别添加到你的unity项目中。第一种:找到KinectManager组件,在例子中它被附在MainCamera上。在组件中有两个列表的属性“Player1 Gestures”(来自player 1 的手势)“Player2 Gestures”(来自player2的手势)。这两个列表所带的手势,整个游戏运行过程中都可以检测识别。第二种是以编程的方式去实现用户特定的手势。你需要实现KinectGestures.GestureListenerInterface接口来添加手势或者处理任何指定的手势。这里有一个例子:KinectScripts/Extras/SimpleGestureListener。简单的描述如下:

UserDetected()用于启动手势检测;

UserLost()用于清理变量或者占用的资源。你并不需要移除UserDetected()中添加的手势。这些将会在调用UserLost()前自动清除。

GestureInProgress()在一个手势开始但是还没有被结束或者取消时调用。

GestureCompleted()在一个手势结束时调用。你可以在这里添加自己的代码来处理手势

GestureCancelled()手势被取消时调用

识别手势

以下手势能被流畅的识别:

◎RaiseRightHand / RaiseLeftHand – 左手或右手举起过肩并保持至少一秒

◎Psi –双手举起过肩并保持至少一秒

◎Stop – 双手下垂.

◎Wave –左手或右手举起来回摆动

◎SwipeLeft – 右手向左挥.

◎SwipeRight – 左手向右挥.

◎SwipeUp / SwipeDown – 左手或者右手向上/下挥

◎ Click – 左手或右手在适当的位置停留至少2.5秒.

◎RightHandCursor / LeftHandCursor – 假手势,用来使光标随着手移动

◎ZoomOut – 手肘向下,左右手掌合在一起(求佛的手势),然后慢慢分开.

◎ZoomIn – 手肘向下,两手掌相聚至少0.7米,然后慢慢合在一起

◎Wheel –英文原版描述不清,就是ZoomOut/In的手势,只不过在动的时候是前后而非左右。

◎Jump –在1.5秒内髋关节中心至少上升10厘米

◎Squat -在1.5秒内髋关节中心至少下降10厘米

◎Push – 在1.5秒内将左手或右手向外推

◎Pull -在1.5秒内将左手或右手向里拉

添加你的手势

这里提供一下关于在Kinect添加手势识别的过程,你需要有一点C#的基本知识并且了解一点关于Kinect传感器的基本工作流程。在Kinect的坐标系统中,它提供的是被追踪对象的三维坐标,以米为单位。

添加一个用户自定义的识别手势,首先你需要打开Assets/KinectScripts/KinectGestures.cs脚本文件,然后:

1、  找到Gestures的枚举,并在这个枚举的后面添加上你要定义的手势的名称

2、  找到CheckForGesture()函数,这里有一个非常长的switch()语句,每一个Gestures枚举里的手势都需要在这里使用case语句进行处理。因此,你需要在这里添加一个case语句来处理你新添加的手势。

3、  当然,你可以看看RaiseLeftHand, RaiseRightHand, SwipeLeft or SwipeRight这些是如何处理的,作为学习的例子。

4、  如你所见,每一个处理手势的内部还有一个switch语句来检测和改变手势的当前状态。每个状态用数字来表示(0,1,2,3…),它的状态根据GestureData结构体存储的数据变化而改变。这个数据结构体是为每一个在场景中的需要被识别的手势创建的。

5、  一个手势的初始状态是0,在这个状态下,程序需要识别这个手势是否开始。要做到这一点,它需要检查并存储关节的位置,通常是左右手。如果一个关节的位置符合某个手势的开始,那么这个手势的状态值就加一。在下一个状态,它需要检查这个关节是否达到了预期的位置(或者移动了理想的距离)。这个检查需要在一定的时间内完成,我们通常设置为1-1.5秒。

6、  如果在设置的时间内这个关节被检测到达到了预期的位置(或者移动了理想的距离),那么那个手势就被认为识别成功了;否则,视为手势被取消,状态将被置为0,并重新开始。

Kinect帮助文档翻译之二 手势的更多相关文章

  1. kinect学习笔记(二)—— Sdk平台的搭建~、

    一.资源下载        由于我们使用的kinect v1.0,所以我们只需要使用1.8版本的sdk就好了,然后资源包,在QQ群的共享里面已经有啦,所以大家可以直接下载. 二.软件安装        ...

  2. Kinect帮助文档翻译之一 入门

    最近在玩Kinect,使用的是Unity,发现网上好像没有什么教程.自己就只有抱着英文版帮助文档啃,真是苦逼 本人英语也不好,大家将就着看吧 Kinect入门帮助 如何运行示例 1       下载并 ...

  3. Kinect开发笔记之二Kinect for Windows 2.0新功能

    这是本博客翻译文档的第一篇文章.笔者已经苦逼的竭尽全力的在翻译了.但无奈英语水平也是非常有限.不正确或者不妥当不准确的地方必定会有,还恳请大家留言或者邮件我以批评指正.我会虚心接受. 谢谢大家.   ...

  4. 【Unity/Kinect】获取预制的手势信息KinectInterop.HandState

    Kinect使用了枚举KinectInterop.HandState来描述手势. 该手势指的是手掌的状态(张开/握拳),而不是说整个手臂的肢体动作(Gesture). 同样是需要嵌套在Kinect获取 ...

  5. Unity Networking API文档翻译(二):The High Level API

    高级API (HLAPI) 是用来提供给Unity 创建多人在线游戏的组件.它是在底层传输层的基础上构建的, 对多人在线游戏提供了很多通用的功能.当传输层支持各种网络拓扑结构的时候,HLAPI是一个功 ...

  6. Kinect帮助文档翻译之三 多场景

    在多个Sense中使用KinectManager 为了在多个场景下都能使用KinectManager这个组件,它必须被附在一个只生成一次.不会被销毁且在所有场景中都能访问的游戏物体上,显然把它附在Ma ...

  7. Pilosa文档翻译(二)入门指南

    目录 开始 Pilosa 简单项目 创建架构(Create the Schema) 从CVS文件导入数据 做一些查询(Queries) 接下来做什么? Pilosa支持默认使用JSON的HTTP接口. ...

  8. NServiceBus官方文档翻译(二)NServiceBus 入门

    在这篇教程中我们将学习如何创建一个非常简单的由客户端向服务端发送消息的订单系统.该系统包括三个项目:Client.Server 和 Messages,我们将按照以下步骤来完成这个任务. 创建 Clie ...

  9. Orchard Core 文档翻译 (二)代码生成模板 Code Generation Templates

    Code Generation Templates 翻译原文:https://www.cnblogs.com/Qbit/p/9746457.html转载请注明出处 Orchard Core Templ ...

随机推荐

  1. 问 如何使用css将select的边框以及右边的小三角形去掉?

    最好css2,css3都给出解决方案,效果如下: CSS2 只能使用div和ul进行模拟了,结构很简单,具体可参考Alice的 button-dropdownCSS3 可以使用CSS3的属性appea ...

  2. poj1942 Paths on a Grid

    处理阶乘有三种办法:(1)传统意义上的直接递归,n的规模最多到20+,太小了,在本题不适用,而且非常慢(2)稍快一点的算法,就是利用log()化乘为加,n的规模虽然扩展到1000+,但是由于要用三重循 ...

  3. 一个学生分数表,用sql语句查询出各班级的前三名

    昨天去一家公司面试,被这道题难住了,哎,又失去一次好的机会. 回来 之后就再想这个问题 表结构及数据如下:

  4. CentOS学习笔记--目录配置

      Linux目录配置 类Linux的目录看上去差不多,为什么? 以下内容节选自l 鸟哥的 Linux 私房菜 -- 基础学习篇目录  第六章.Linux 的文件权限与目录配置 3. Linux目录配 ...

  5. object

    object对象 定义一个对象 var obj = {}; obj.name = 'Kate'; var obj = {name:'Jerrt'}; var obj = new Object(); O ...

  6. 微软必应·英雄会第三届在线编程大赛:几个bing?

    发布公司:微软亚太研发集团 有 效 期:2013-12-31至2014-02-01 难 度 等 级: 答 题 时 长:120分钟 编程语言要求:C C++ Java C# 悬赏详情 一等奖 : 价值2 ...

  7. 通过HttpClient方式连接网络

    xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  8. 第一节:CLR寄宿

    本系列文章来自 CLR VIA C# .NET FrameWork在Microsoft  Windows平台的顶部运行.这意味着.NET必须用Windows可以理解的技术来构建.首先,所有的托管模块和 ...

  9. 第六章 管理类型(In .net4.5) 之 创建类型

    1. 概述 本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型. 2. 主要内容 2.1 如何选择类型 C#类型系统包括三种类型:值类型.引用类型.指针类型.(指针类型用于非托管代码,很少使 ...

  10. C实现辗转相除法求两个数的最大公约数

    什么是辗转相除法? 辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数.是已知的最古老的算法. 用辗转相除法求132和72的最大公约数的步骤: 132 / 72 = 1 ... 60 ...