最近需要学习Unity3D和Kinect交互进行开发。查阅网上的资料,一直没有找到详尽而又简单的方案。今天终于摸索出来在Unity3D中使用Kinect的方法,特此做个笔记。

一、Unity和Kinect交互的环境配置

我所使用的Unity3D的版本是Unity3.5,使用的Kinect SDK版本是SDK1.6,令Kinect和Unity交互的方法是使用CMU的封装,但是这个方法支持的Kinect SDK版本是SDK1.0,要想使用1.5或1.6版本的kinect SDK,就要做一些相应的修改。完整的方案如下:

1、安装Uinty3D

我使用的Unity3D版本是3.5,也可以在Unity3D官网上下载free版本的Unity。

2、安装Kinect SDK

我使用的SDK版本是1.6,可以在Kinect for Windows官方网站上下载。

3、安装Kinect Wrapper Package for Unity3D

这个就是CMU封装的用于Kinect开发的Unity3D导入包了。以后在Unity3D工程中,如果需要使用和kinect交互,那么就需要在这个工程中导入这个包。点击这里下载KinectWrapperPackage。

4、运行示例工程

在CMU提供的KinectWrapperPackage包中,已经包含了一个叫做KinectExample.untiy的Unity示例工程。 在工程中导入KinectWrapperPackage包之后,在Unity的project面板上找到 Scences->KinectExample,双击就可以打开这个示例工程。

或者是单独下载CMU提供的示例工程:newKinect,这个示例工程和导入的包中包含的示例工程是一样的。

打开示例工程后,在Hierarchy面板中,可以看到这些内容:

5、修改导入包中的相关文件

CMU提供的unity导入包支持的kinect SDK版本是1.0,如果想使用其他版本的SDK,就要下载并替换导入包中的一些文件。具体来说就是KinectInterop.cs和KinectSensor.cs这两个文件。

点击这里下载适用于Kinect SDK1.6版本的替换文件。

下载完成之后,将下载之后的文件替换掉上面面板中所标识的这两个文件就可以了。然后就可以运行示例工程,体验在unity创建的场景中使用kinect控制人物模型及小球的运动。

使用修改后的导入包

如果你觉得每次导入资源包,然后再修改两个文件实在麻烦,我已经将修改后的资源包导出。以后在每次开发工程时,只需要导入这个修改之后的资源包就行了。

点击这里下载适用于Kinect SDK1.6的资源包。

二、用于kinect开发的包中包含的资源

用于kinect开发的包中(Kinect Wrapper Package for Unity3D)包含了所有我们开发unity+kinect需要用到的脚本。

导入包之后,所有我们需要的资源都会出现在project面板中,具体来说是以下的一些资源:

Scenes

  • KinectExample – 示例场景,这个例子向你展示了如何通过在每一个kinect 可以追踪的骨骼点上放置小球来产生骨骼运动。以及怎样使用kinect来控制模型。

Prefabs

  • Kinect_Prefab– 这个预设(prefab)包含了我们开发unity+kinect程序所必需的所有脚本。但是它并没有包含你需要的用于控制模型的控制器(controller)。
  • KinectPointMan – 这个预设(prefab)向你展示了KinectPointController这个控制器是怎样使用的。

Kinect

  • KinectModelControllerV2 – 你需要将这个脚本拖放到你想要应用kinect控制的模型上。为了让模型能够跟上人的节奏,你需要将模型上控制模型动作的关键骨骼拖放到这个脚本暴漏的合 适的变量中 ,也就是将模型中的骨骼与kincet识别到的人的骨骼绑定起来。另外这个脚本暴漏的变量中,还有一个变量时标识模型是受哪个玩家控制。
  • KinectPointController – 你也需要将这个脚本拖放到场景中的游戏物体上。但是这个游戏物体不是模型,而是由一系列分别代表头部、肩部、手等人体部位的点组成。你需要将游戏物体中的 这些关键点都拖放到这个脚本暴漏的外部变量中。这样就可以使用kinect控制游戏物体了,游戏物体是由一系列的点组成的人体。
  • DisplayDepth – 这个脚本得到深度图像。
  • DisplayColor – 这个脚本得到RGB图像。
  • KinectRecorder – 这个脚本用于记录你的动作,并为kinect模拟器(emulator)产生回放文件。
  • KinectEmulator – 这个脚本模拟kinect设备.和KinectRecorder产生的回放文件一起工作。
  • KinectSensor – 这个脚本从Kinect设备中取得数据。需要替换这个文件使用特用版本的SDK.
  • DeviceOrEmulator – 这个脚本设置使用kinect物理设备还是kinect模拟设备.
  • SkeletonWrapper – 这个脚本抓取骨骼数据.
  • DepthWrapper – 这个脚本抓取深度图像数据.
  • KinectInterop – 这个脚本从Microsoft Kinect SDK中抓取数据.
  • Recordings/playbackDefault – 这是为kinect模拟设备准备的默认的回放文件.

Models and Materials

  • rainbowMan
这是示例模型。你需要将KinectModelControllerV2这个脚本拖放在这个模型上,并将组成模型的骨骼与脚本中暴漏的骨骼部位变量绑定在一块。然后就开始测试吧。

三、在自己的工程中使用KinectWrapperPackage包

要想在自己的工程中,使用KinectWrapperPackage包来达到unity3d和kinect交互。首先需要导入这个包到unity中,然后经过下面的步骤完成交互。

1、设置Kinect_Prefab

前面提到过了,如果在Unity中和Kinect交互,Kinect_Prefab这个游戏物体是必不可少的。 这个物体需要存在于你的场景中的某 处。并且在KinectWrapper 脚本中调用了DontDestroyOnLoad这个函数,所以当你切换场景时,它仍旧存在着,因此你不必在每个场景中都实例一个 Kinect_Prefab。

在Unity中,将project面板中的Kinect_Prefab直接拖拽到Hierarchy面板就可以了。

2、控制游戏中的角色

为了控制场景中的角色的移动,你需要将KinectModelControllerV2这个脚本拖拽到场景中的模型上,并绑定骨骼;或者你为了控制一系列的游戏物体,你需要将KinectPointController拖拽这些物体上。下面分别说明这个脚本的使用。

模型控制器:KinectModelControllerV2

为使用模型控制器,请按照以下步骤:

  1. 拖拽脚本资源KinectModelControllerV2到场景中的模型中。
  2. 选择场景中的模型。找到模型中的暴漏变量Sw(它代表Skeleton Wrapper). 并将当前场景中的Kinect_Prefab拖拽给Sw这个变量。
  3. 详细展开你的模型,让模型的每一块骨骼在hierarchy面板中可见。
  4. 一个接一个地把模型中的骨骼拖拽到脚本中暴漏的对应的变量中.确保每一个骨骼都对应到了正确的变量上。
  5. 当模型中所有的骨骼都放置好了之后,改变暴漏的Player变量的值,这个变量表明该模型是受哪个玩家控制, 0代表第一个玩家,1 代表第二个玩家。
  6. 接下来要设置暴漏的Mask变量的值。设置合适的值,以决定是所有的骨骼都受Kinect控制,还是仅仅一部分骨骼受Kinect控制.如果这些 受Kinect控制的骨骼都不是你想要的,你可以自己写一个控制模型的脚本来代替KinectModelControllerV2。
  7. 当游戏玩家在控制模型时,如果你想要该模型同时播放自带的动画,那么你需要在暴漏的变量中选中animated选项,并设置BlendWeight变量的值,来决定模型受自带模型动画和Kinect驱动动作的最终混合效果。该变量取值范围为0到1之间。
例如示例程序中骨骼和变量的对应关系如下:

一系列点的控制器:KinectPointController

为了使用该控制器控制一系列的点,请遵从下面几步:

  1. 在场景中创建一个空物体对象,作为你想要控制的一系列点的容器。
  2. 将其他的物体拖拽到刚刚创建的空物体中,并放置到相同的位置。使刚才创建的空物体成为这些物体的父节点。
  3. 拖拽KinectPointController脚本到这些物体的父节点上。
  4. 选中父节点,在Inspector面板中暴漏的变量中,找到Sw变量 (该变量表示Skeleton Wrapper).拖拽当前场景中Kinect_Prefab赋给这个变量。
  5. 拖拽你想利用Kinect控制的每一个物体到Inspector面板对应的合适的变量中。
  6. 设置Player变量(代表玩家)和Mask变量(代表哪些骨骼收到监控).

示例程序中,不同的物体和变量的对应关系如下:

仔细研究包中自带的例子,很容易就明白如何在Unity中结合Kinect开发了。

*********************************************

参考资料:
《unity3d Kinect SDK v1.5+Unity3D 体感游戏开发》
《配置unity3D 3.5 with Kinect SDK1.6》
《CMU WIKI:Microsoft Kinect – Microsoft SDK》

Unity3D学习:结合Kinect进行游戏开发 | 孤舟博客相关推荐

  1. Microsoft .NET Compact Framework 开发常见问题解答 - 专注.NET技术及其相关应用开发! - 博客园...

    Microsoft .NET Compact Framework 开发常见问题解答 发布日期: 3/30/2005 | 更新日期: 3/30/2005 Microsoft .NET Compact F ...

  2. Android 常用开发功能 博客导航

    转载地址:http://blog.csdn.net/ciqing123/article/details/52931663?locationNum=16&fps=1 简介:第一次在CSDN上发表 ...

  3. 【Python】100行Python代码轻松开发个人博客

    ❝ 本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的系列教程「Python+Dash ...

  4. Python Flask框架-开发简单博客-认证蓝图

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  5. Flask开发轻博客(一):欢迎来到-Flask-的世界

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 目录 Flask开发轻博客(一):欢迎来到 Flask 的世界 Flask开发轻博客(二):Flask ...

  6. Spring Boot + vue-element 开发个人博客项目实战教程(四、数据库搭建和配置)

    前言 java项目已经创建好了,接下来我们要准备数据库了,数据库是干嘛的相信大家都知道了,我在这就不说了,我们需要做的就是在电脑上安装mysql数据库. 附菜鸟教程的MySQL基础学习教程:https ...

  7. Flask开发轻博客(一):欢迎来到 Flask 的世界

    目录 Flask开发轻博客(一):欢迎来到 Flask 的世界 Flask开发轻博客(二):Flask 模板 Flask开发轻博客(三):Flask 的 Web 表单 Flask开发轻博客(四):数据 ...

  8. Spring Boot + vue-element 开发个人博客项目实战教程(二十五、项目完善及扩展(前端部分))

    ⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程 ⭐专栏内容:零基础学Java.个人博客系统 ⭐我的文档网站:http://xyhwh- ...

  9. 零基础Django3小时开发个人博客系统

    准备阶段 Python>=3.5 Django==2.0 Pycharm IDE Python安装 官网下载Python对应版本的安装包(Python3.7.7 For Windows) 双击安 ...

最新文章

  1. 码农也能有春天:一个人独立运营网站12年,赚到了5亿多美元!
  2. c#使用正则表达式获取TR中的多个TD_一个 Vue 模板可以有多个根节点(Fragments)?
  3. JVM调优总结(五)-分代垃圾回收详述1
  4. Win11关机后自动开机怎么办 Win11关机后自动开机的解决方法
  5. SQL优化:紧急情况下提高SQL性能竟是这样实现的!(文中有惊喜)
  6. java 优先级文档_java 优先级队列.pdf
  7. java笔试之从单向链表中删除指定值的节点
  8. css 日语字体,css字体
  9. redhat下载镜像官方地址
  10. 海康网络摄像机的使用
  11. 12306 验证码代码分析
  12. ubuntu中 /usr、/var、/opt目录解析
  13. 【华人学者风采】韩亚洪 天津大学
  14. 单片机:AT89s52 定时器 time0
  15. 苹果手机计算机怎么看以前的记录,苹果手机怎么查找以前的历史通话记录
  16. HTTP2.0多路复用
  17. Android系统自定义关机充电图标
  18. 怎样训练左右手协调_学钢琴左右手不协调怎么办?几个小技巧拿走不谢
  19. 一个小程序员年薪五万的悲哀生活和他的理财梦
  20. 上海无居住证120积分随迁子女如何求学(中考)

热门文章

  1. 机器学习面试笔试超详细总结(一)(转载)
  2. nginx反向代理实现指定接口访问指定机器
  3. dexpress 流程图_请教devexpress的winform界面开发基本步骤
  4. Mac电脑蓝牙连接出问题了,如何重置Mac的蓝牙模块
  5. Ural 2045 Richness of words
  6. ServiceNow CSA管理员考试(ServiceNow Fundamentals (On Demand) Paris)
  7. html5密码确认属性,HTML5表单及其验证【html自带属性验证】
  8. 安卓平板隐藏虚拟按键_Android 4.0 虚拟按键、手机模式、平板模式
  9. 对2-9取余的计算方法
  10. java sql date 时分秒_java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间...