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

最近公司项目须要作科技馆的体感游戏,之前也没接触过游戏,虽然之前本身也是想作游戏,我想大部分都是学编程出来来作游戏,哈哈(请容许我淫笑一下,终于能够作这方面)。虽然之前没接触过体感游戏,看到的体验也是大部分看到的视频,幸亏如今网络仍是比较发达,上网大概了体感游戏开发,目前比较好的是Unity3D和Kinect结合交互进行开发。如今内心的感受用句话说:哥如今也走在世界技术最前言,TMD碉堡了!
  9月7号开始查阅网上的资料,一直没有找到详尽而又简单的方案。网上目前我看到就三种方法,说是三种方法说白了就一种:中间件。形散而神不散--散文的最高境界(其实我语文很差,对不起祖国气个人指望,呜呜、、、)三种方法以下:

1.卡耐基梅隆的kinectWrapper.unitypackage;c++

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

3.本身写的交互的中间件,我在网上看见高手本身的写的中间件,封装为DLL,如今经过这段时间动手实现,发现本身写一个这样的中间件其实也不难,后期也本身准备写一个。 我在采用的第一种方法,缘由上面三点大概说来了,第二点之后考虑支持的版本和官方的态度,因此暂时不考虑;第三种目前本身还没写,目前来讲也不太现实,也暂时不考虑考虑。因此目前状况就暂时考虑第一种;c#

废话说了那么多,相信各位机油们早就寂寞难耐了,如今就切入正题:

1、Unity和Kinect交互的环境配置 我目前所使用的Unity3D的版本是Unity3.5; 使用的Kinect SDK版本是SDK1.6; Kinect和Unity交互的卡耐基梅隆的kinectWrapper.unitypackage方法是使用CMU的封装,这个方法支持的Kinect SDK版本是SDK1.0,要想使用1.6版本以上的kinect SDK,就要作一些相应的修改。完整的方案以下(这个也为何上面说后期打算本身封装一个相似这样组件DLL):网络

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

二、安装Kinect SDK我使用的SDK版本是1.6,能够在Kinect for Windows官方网站上下载。动画

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

2、简单Kinect Wrapper Package for Unity3D包含了全部咱们开发unity+kinect须要用到的脚本。code

1.导入包以后,全部咱们须要的资源都会出如今project面板中,具体来讲是如下的一些资源: 在此输入图片描述视频

2.Scenes KinectExample - 示例场景,这个例子向你展现了如何经过在每个kinect 能够追踪的骨骼点上放置小球来产生骨骼运动。中间件

Prefabs Kinect_Prefab- 包含了咱们开发unity+kinect程序所必需的全部脚本。可是它并无包含你须要的用于控制模型的控制器(controller)。 KinectPointMan - KinectPointController这个控制器(controller)是怎样使用的。

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

3、使用KinectWrapperPackage包要想在本身的工程中 首先须要用unity3D建立一个空工程,而后将kinectWrapper.unitypackage导入这个包到unity中,而后通过下面的步骤完成交互。

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

二、控制游戏中的角色为了控制场景中的角色的移动,你须要将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之间。 在此输入图片描述

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

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

相关文章
相关标签/搜索