Kinect结合Unity3D引擎开发体感游戏

1 最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面)。虽然以前没接触过体感游戏,看到的体验也是大部分看到的视频,幸好现在网络还是比较发达,上网大概了体感游戏开发,目前比较好的是Unity3D和Kinect结合交互进行开发。现在心里的感觉用句话说:哥现在也走在世界技术最前言,TMD碉堡了!
2 9月7号开始查阅网上的资料,一直没有找到详尽而又简单的方案。网上目前我看到就三种方法,说是三种方法说白了就一种:中间件。形散而神不散–散文的最高境界(其实我语文不好,对不起祖国气我的期望,呜呜、、、)三种方法如下:
1.卡耐基梅隆的kinectWrapper.unitypackage;

2.OpenNI官方提供的OpenNI_Unity_Toolkit-0.9.7.4.unitypackage(现在官方不提供更新与支持了,支持的版本unity3.4,在往上版本会出现很多问题,需要修改很多地方,比较麻烦);

3.自己写的交互的中间件,我在网上看见高手自己的写的中间件,封装为DLL,现在通过这段时间动手实现,发现自己写一个这样的中间件其实也不难,后期也自己准备写一个。

1 我在采用的第一种方法,原因上面三点大概说来了,第二点以后考虑支持的版本和官方的态度,所以暂时不考虑;第三种目前自己还没写,目前来说也不太现实,也暂时不考虑考虑。所以目前情况就暂时考虑第一种;
2
3 废话说了那么多,相信各位机油们早就寂寞难耐了,现在就切入正题:
一、Unity和Kinect交互的环境配置
我目前所使用的Unity3D的版本是Unity3.5;
使用的Kinect SDK版本是SDK1.6;
Kinect和Unity交互的卡耐基梅隆的kinectWrapper.unitypackage方法是使用CMU的封装,这个方法支持的Kinect SDK版本是SDK1.0,要想使用1.6版本以上的kinect SDK,就要做一些相应的修改。完整的方案如下(这个也为什么上面说后期打算自己封装一个类似这样组件DLL):

1、安装Uinty3D我使用的Unity3D版本是3.5,上官网下载(需要注册,才能用,我推荐大家去付点钱,我是自己找的破解码,声明不支持这样的行为,大家懂就好)。

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

3、在Unity3D工程中,如果需要使用和kinect交互,那么就需要在这个工程中导入卡耐基梅隆的kinectWrapper.unitypackage。百度怎么用大家都懂吧(需要用kinect SDK版本是1.6以上版本(1,7以上版本还没试过替换是否可以,理论上应该也可以),就要下载KinectWrapperPackage替换文件并替换导入包中的KinectInterop.cs和KinectSensor.cs这两个文件即可)
好啦!目前准备工作都ok了!

二、简单Kinect Wrapper Package for Unity3D包含了所有我们开发unity+kinect需要用到的脚本。

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

2.Scenes

1 KinectExample - 示例场景,这个例子向你展示了如何通过在每一个kinect 可以追踪的骨骼点上放置小球来产生骨骼运动。
Prefabs

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

Kinect

1 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中抓取数据.

三、使用KinectWrapperPackage包要想在自己的工程中
首先需要用unity3D创建一个空工程,然后将kinectWrapper.unitypackage导入这个包到unity中,然后经过下面的步骤完成交互。

1、设置Kinect_Prefab前面提到过了,如果在Unity中和Kinect交互,Kinect_Prefab这个游戏物体是必不可少的。 这个物体需要存在于你的场景中的某处。所以当你切换场景时,它仍旧存在着,因此你不必在每个场景中都实例一个Kinect_Prefab。
在Unity3D中,找到project面板中的Kinect_Prefab直接拖拽到Hierarchy面板就可以了。

2、控制游戏中的角色为了控制场景中的角色的移动,你需要将KinectModelControllerV2这个脚本拖拽到场景中的模型上,并绑定骨骼;
当然你为了控制一系列的游戏物体,你需要将KinectPointController拖拽这些物体上。
下面分别说明这个脚本的使用(这两个脚本需要自己更具情况去定制)。

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

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

四、运行KinectWrapperPackage包中事例
保证Kinect设备连接成功指示灯为绿色,上面安装包安装配置好,最后运行事例
在此输入图片描述
注意图片的左下角的数字,证明连接成功 ,连接成功的时候Kinect设备还会自己调整角度(最左边的指示灯会有红色)并且模型会随着你动而动

欢迎大家期待第二篇,将写一个3D人物模型,随着身体指示,产生转身和前进与跑步
先上一张图(第二篇会上相关的脚本代码,由于unity脚本主要是c#和js,所以我采用c#写的脚本,9月7号才接触到unity和kinect,原来工作一直用c/c++,c#都是现学现买所以有不当之处,还请大家使劲拍砖):
在此输入图片描述
在此感谢欢乐OSC群 感谢那些机油的鼓励 @铂金小猪 @铂金小狼 等

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

带尺寸的图片:

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目

    • 项目

      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞​tz−1e−tdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

Kinect结合Unity3D引擎开发体感游戏相关推荐

  1. Kinect结合Unity3D引擎开发体感游戏(二)

    这篇接着<Kinect结合Unity3D引擎开发体感游戏(一)>,时隔3个月才出这篇,在此期间还有不少机油们,要求出续集,期间在公司那边事情太多,一直帮公司前人做的项目擦屁股,到目前为止, ...

  2. [Kinect]Kinect结合Unity3D引擎开发体感游戏

    最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验也是 ...

  3. Kinect结合Unity3D引擎开发体感游戏(一

    1 最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验 ...

  4. C#开发体感游戏 Kinect应用知识

    Kinect首先是一个XBox 360外接体感设备,通过无线方式捕捉动作感知.由PrimeSense提供Range Camera技术,同类产品如任天堂Wii.Play Station Move,必须让 ...

  5. 大学生角度_LeapMotion结合Unity开发体感游戏_03

    如果读者看到了这儿,说明肯定是遇到了一点点小困难,或者真的是很感兴趣.我很希望是能有所帮助,但是接下来我要说一些大实话啦~~(如果觉得写的不对的话,就当是一个大二的小女生乱说吧~) 拿到设备后兴致勃勃 ...

  6. android体感游戏主机,体感手势引擎+智能电视机顶盒+3D深度摄像头,速盟打造基于Android的体感游戏平台#36氪开放日#...

    相信36氪的读者对Kinect 一定有所了解.这是由微软开发,应用于 Xbox 360 主机的一种3D体感摄影机,利用即时动态捕捉.影像辨识.麦克风输入.语音辨识等功能带给玩家"免控制器的游 ...

  7. 多人交互与体感游戏开发相关技术说明

    在淘宝开店过程中,经常有客户咨询多点交互与多人体感互动方面的知识,本人是it的门外汉,不是大家说的程序猿,但与相关硬件合作伙伴接触的比较多,对光学识别方面的了解有点时间,所以在果壳网这个地方留个记号, ...

  8. Softkinetic有望超越Kinect,并加速体感游戏进化

    Softkinetic有望超越Kinect,并加速体感游戏进化 那些关注视频游戏的家伙们想到基于动作识别的视频游戏,微软的Xbox 360 Kinect可能会立即浮现在脑海. 不过Kinect并不是唯 ...

  9. 《体感游戏演进与体感游戏开发》会议随笔

    昨天参加了中国移动Ophone游戏的上海站宣讲会,记录随笔如下: 与会人数挺多,不过大多数都是穿着制服的学生,真正相关行业者也就仅仅坐满前几排而已,而且其中一些人还不是搞游戏的,看来大家对于Ophon ...

最新文章

  1. mingw控制台中文乱码
  2. 图像翻译、语义分割、域适应、图像检索、无监督学习cvpr2021
  3. 去除word文档中向下的箭头图标
  4. Opencv3编程入门学习笔记(五)之通道分离(split)与合并(merge)
  5. 变量的比较之equals 与 == 的区别
  6. 第二十二章 6未命名的命名空间
  7. 华三交换机ping大包命令_华三交换机常用命令
  8. 【Sqoop】sqoop导入导出
  9. 老子《道德经》第三章
  10. 社区发现(二)--GN
  11. mp2551总线收发器芯片作用_什么是现场总线,为什么需要隔离处理?
  12. 火绒盾广告拦截提取 内置WINCC PCS7硬狗弹框提示拦截
  13. 29-基于单片机的防盗报警系统仿真
  14. Modern Robotics:机器人的构型空间
  15. 简述MySQL分区表类型
  16. Lync 2010移动客户端无法登陆的解决办法
  17. AntV-G6:画自动连线流程图
  18. 中国火星车登陆,对地“网速“只有16bps
  19. 开源免费OA教程:移动端工作表单操作条的使用方法
  20. Linux5配置本地yum源,Rehat Enterprise Linux 5:配置本地yum源

热门文章

  1. 前端面试题汇总HTML篇
  2. linux显示目录层次,linux文件层级、目录、文件基本操作介绍
  3. 模型视图简介、QListWidget、QTreeWidget、QTableWidget、QStringListModel、QFileSystemModel
  4. 网页中时光轴的简单实现
  5. 内螺旋矩阵和双螺旋矩阵(python)
  6. 用声音在一起,听荔枝CTO丁宁聊UGC声音互动平台的技术世界
  7. 最全的网络硬盘(免费)
  8. <<大话数据结构>>之完结感言
  9. NFT会是数字资产化的开端吗?
  10. Java中char 转化为int小技巧