unity kinect2 怎么使用姿势或者使用你自己的How to Use Gestures or Create Your Own Ones
2015-12-28 14:23
651 查看
首先说明这是unity kinect的一个商业插件 使用的是2.5版本的
这里翻译的是How to Use Gestures or Create Your Own Ones的文档
有两种方式可以在unity工程里使用姿势检测
第一种很简单就是使用KinectManager,只是一个在例子场景主摄像机上的组件。有被称为“用户通用姿势(Player Common Gestures)”的列表。这里你可以放置任何在整个游戏中需要对每个人检测的姿势并且可以快速测试。
第二种方法就是区分用户或者在特定场景的识别。你需要创建一个脚本来改进KinectGestures脚本,GestureListenerInterface脚本和使用他方法来初始化姿势识别检测过程,例如,查看KinectScprits/Extras(Samples)/SimpleGestureListener.cs,下面是关于GestureListenerInterface脚本方法的简单描述。
现在默认能识别的姿势
RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒
Psi 举起双手高于肩膀一秒
Tpose T姿势
Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换
Wave 挥手 左右都行
SwipeLeft 右手挥向左侧
SwipeRight 与上面相反
SwipeUp/SwipeDown 左右都行 上下翻动
ZoomOut 一开始左右手合并放在前面,然后向不同方向分开
ZoomIn 一开始两手相距0.7米以上并放在前面,然后慢慢合并
Wheel 左右手在前面相距肩膀宽度距离,软后抓住假想方向盘转动
Jump 在1.5秒内屁股至少在高度上上升了10cm
Squat 蹲下 在1.5秒内屁股至少在高度上下降了10cm
Push 用左手或者右手在1.5秒内向前推
Pull 用左手或者右手在1.5秒内后拉
LeanLeft 右侧肩向前,也就是向左侧身
LeanRight 与上面相反
KickLeft 向前踢左脚
KickRight 向前踢右脚
怎么加入你自己姿势
有几种方式加入自己的姿势。你需要C#编程技巧和对kinect传感器运行的基础理解,它需要Kinect以米为单位坐标系里身体跟踪数据。
你需要打开Assets/KinectScript/KinectGestures.cs文件
1找到 public enum Gestures 把你姿势名字放最后一个位置
2找到public static void CheckForGesture,里面有一个很长的Switch,它处理了在第一步中定义的每个姿势,你需要加上新的case来加上你的姿势,并改进姿势描述
3可以找个例子先看下 比如RaiseLeftHand那个
4如你所见,每个姿势都有自己内部的switch,它们是用来检测和改变姿势现在的状态的,每个姿势很像一个有着0,1,2,3的姿势状态机器,现在的状态和其他数据都存贮了一个内部的GestureData类型结构体,这个结构体被创建用来识别每个需要被识别的姿势
5这个内部的姿势状态在一开始都是0,这个状态下,代码需要检测姿势是否开始,它需要检测和存贮关节的位置,通常是左右手的,如果关节位置匹配一个姿势的起步位置,它就增加这个状态的值,在下一个状态,它就检测关节是否在规定的时间内达到需要的位置。(这个事件通常是1到1.5秒)
6 如果关节在规定时间内达到了目标位置(或者目标距离),姿势会被认为是完成了,否则就是取消了,然后姿势状态会被重设为0,然后重新开始检测
需要加入你自己姿势,第一需要理解相关的简单姿势就像RaiseLeftHand那个,然后找相似的改善并拷贝。
这里翻译的是How to Use Gestures or Create Your Own Ones的文档
有两种方式可以在unity工程里使用姿势检测
第一种很简单就是使用KinectManager,只是一个在例子场景主摄像机上的组件。有被称为“用户通用姿势(Player Common Gestures)”的列表。这里你可以放置任何在整个游戏中需要对每个人检测的姿势并且可以快速测试。
第二种方法就是区分用户或者在特定场景的识别。你需要创建一个脚本来改进KinectGestures脚本,GestureListenerInterface脚本和使用他方法来初始化姿势识别检测过程,例如,查看KinectScprits/Extras(Samples)/SimpleGestureListener.cs,下面是关于GestureListenerInterface脚本方法的简单描述。
UserDetected() 当一个新的用户被检测到的时候invoked,这个可以用来启动姿势识别 UserLost() 当用户消失的时候invoked 这个可以被用来清理或者释放资源,但你不需要特意停止在之前加上的姿势识别 GestureInProgress() 当姿势初始状态被检测的时候invoked,但是姿势并没有完成或者取消,这个可以被用来报告姿势的进程或者姿势按照预期的精确完成状况,例如人物的走路或者跑步姿势 GestureGompleted() 姿势被完成的时候invoked,你可以在这里使用姿势识别,和决定是否需要重新设置新的姿势(比如重启检测) GestureCancelled() 如果姿势别取消时候invoked,姿势的取消是由姿势检测路径来决定的,如果没有在规定时间内按照姿势检测路径完成姿势,那么这个姿势就会取消,你也可以在这里设定是否需要重新设置新的姿势(比如重启检测)
现在默认能识别的姿势
RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒
Psi 举起双手高于肩膀一秒
Tpose T姿势
Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换
Wave 挥手 左右都行
SwipeLeft 右手挥向左侧
SwipeRight 与上面相反
SwipeUp/SwipeDown 左右都行 上下翻动
ZoomOut 一开始左右手合并放在前面,然后向不同方向分开
ZoomIn 一开始两手相距0.7米以上并放在前面,然后慢慢合并
Wheel 左右手在前面相距肩膀宽度距离,软后抓住假想方向盘转动
Jump 在1.5秒内屁股至少在高度上上升了10cm
Squat 蹲下 在1.5秒内屁股至少在高度上下降了10cm
Push 用左手或者右手在1.5秒内向前推
Pull 用左手或者右手在1.5秒内后拉
LeanLeft 右侧肩向前,也就是向左侧身
LeanRight 与上面相反
KickLeft 向前踢左脚
KickRight 向前踢右脚
怎么加入你自己姿势
有几种方式加入自己的姿势。你需要C#编程技巧和对kinect传感器运行的基础理解,它需要Kinect以米为单位坐标系里身体跟踪数据。
你需要打开Assets/KinectScript/KinectGestures.cs文件
1找到 public enum Gestures 把你姿势名字放最后一个位置
2找到public static void CheckForGesture,里面有一个很长的Switch,它处理了在第一步中定义的每个姿势,你需要加上新的case来加上你的姿势,并改进姿势描述
3可以找个例子先看下 比如RaiseLeftHand那个
4如你所见,每个姿势都有自己内部的switch,它们是用来检测和改变姿势现在的状态的,每个姿势很像一个有着0,1,2,3的姿势状态机器,现在的状态和其他数据都存贮了一个内部的GestureData类型结构体,这个结构体被创建用来识别每个需要被识别的姿势
5这个内部的姿势状态在一开始都是0,这个状态下,代码需要检测姿势是否开始,它需要检测和存贮关节的位置,通常是左右手的,如果关节位置匹配一个姿势的起步位置,它就增加这个状态的值,在下一个状态,它就检测关节是否在规定的时间内达到需要的位置。(这个事件通常是1到1.5秒)
6 如果关节在规定时间内达到了目标位置(或者目标距离),姿势会被认为是完成了,否则就是取消了,然后姿势状态会被重设为0,然后重新开始检测
需要加入你自己姿势,第一需要理解相关的简单姿势就像RaiseLeftHand那个,然后找相似的改善并拷贝。
相关文章推荐
- 今天开始进驻CSDN博客,记录自己unity3d学习的每一步。
- Unity水效果
- Unity3D 自定义地形插件(支持FBX导入模型的编辑)
- Unity 自定义地形(可刷地形、材质和种树)(一)
- Unity中更改文件夹名
- Unity中UGUI输入信息框
- Unity串口通讯
- Unity两个手指放大图片的方法
- Unity窗口化无边框模式
- Unity获取游戏对象
- Unity调用外部EXE和启动浏览器(手机端也可以启动IE内核)
- unity中宏定义平台
- Unity3D AssetStore下载的文件保存位置
- Unity3D 摄像机
- Unity3D 2D游戏开发 官方教程。(二)
- blender 给人物角色绑定骨骼到unity3d
- unity, StopAllCoroutines导致bug的解决办法
- Unity3D 2D游戏开发 官方教程。(三)
- Unity3D 2D游戏开发 官方教程。(一)
- 【Unity实用小方法】判断贴图是否为透明贴图