因为对Unity比较熟悉,所以一开始想着就是用Unity结合Kinect来进行游戏开发,而不是用Kinect的SDK强行撸一个出来,再说我也不会啊。
然后就是上网各种找资料咯,开始想用的是OpenNI的那款插件,但是我用的Unity版本是4.5的,出了很多问题,要改的地方太多了,所以果断放弃了。
但是经过不懈地寻找,终于还是发现了两款比较好用的Unity插件啊哈
先来说说第一个: CMU封装的KinectWrapper.unitypackage
但是这个插件支持的Kinect SDK版本为1.0,要是想使用更高版本的SDK还得做相应的修改才行。插件可以点击这里下载
好了,现在我使用的是Unity4.5.2, Kinect SDKv1.8,首先我先将KinectWrapper.unitypackage导入新建的工程中,然后打开Kinect文件夹
标注的部分即为需要替换的两个文件,这样才能支持更高版本的SDK。替换文件在这里
当然也可以直接下载我替换后导出的资源包,点这里下载
修改好了之后正式开工,首先运行一下Scenes里面的场景
你会发现场景中的模型会跟随着你的动作变化而变化,刚开始真是被震撼到了- -
然后看下Hierarchy面板
发现相对于我们正常的Unity项目来说,多了三个东西:
Kinect_Prefab
KinectAvatar
rainbowMan_v6
首先Kinect_Prefab这个物体在场景中是必不可少的,你会发现这个物体添加了我们用来开发的各种脚本
所以只要将它静静地放在场景中的某个角落就行。
然后是KinectAvatar,这个就是我们刚刚场景里面的由小球组成的人,这也是为我们展示了如何通过Kinect来控制游戏中的物体
先创建一个空物体,将你想控制的游戏物体作为子物体给拖进来
然后在父节点上添加KinectPointController这个脚本
再将场景中的Kinect_prefab物体赋给脚本中暴露的sw变量
然后将想要控制的子物体赋给脚本中对应的变量,比如我想用左手控制13_Hand_Left这个子物体,就将它赋给脚本中的Hand_Left这个变量,依次下去即可
最后脚本下方还有这样几个变量:
Player:0代表第一个玩家,1代表第二个玩家
Mask:选择是否所有的骨骼都受控制,还是仅仅某部分
这样就能成功控制游戏中的物体了~
最后是rainbowMan_v6,这是展示了如何控制人物模型,方法和上面一样,只要把对应的骨骼放在对应的位置上就OK了
不同的是,它需要添加的是KinectModelControllerV2这个脚本,而且这个脚本对比之前多了两个变量:
animated:是否能播放模型自带的动画
BlendWeight:模型动画与Kinect动作的混合效果
最后还有几个Kinect常用的脚本:
DisplayDepth:得到深度图像
DisplayColor:得到RGB图像
SkeletonWrapper:获取骨骼数据
DepthWrapper:获得深度图像数据
怎么使用可以查看脚本内部的代码,其他就不一一列举了~