基于Kinect的游戏控制系统研究与实现

2017-07-26 23:48贾骋王卓李妍李依明
新媒体研究 2017年9期
关键词:控制系统游戏

贾骋+王卓+李妍+李依明

吉林动画学院,吉林长春 132000

摘 要 随着虚拟现实技术的快速发展,越来越多的游戏采用虚拟现实设备进行游戏的控制。而目前虚拟现实游戏的控制更多采用基于手柄识别的体感方法,Kinect则很好地解决了这样的问题,其独特的识别技术可以直接识别人体动作,摆脱了游戏人员需要手持设备的缺点。文章通过对Kinect进行研究,最终完成游戏控制系统研究与实现。

关键词 Kinect;游戏;控制系统

中图分类号 G2 文献标识码 A 文章编号 2096-0360(2017)09-0042-03

体感技术,即通过计算机软件及硬件技术,采用特殊设备识别或感应人体动作的技术。此项技术的发明除了使人类与计算机的互动摆脱了传统手持硬件设备的束缚,更加增强了身临其境的体验。目前大多的体感技术都采用手持识别设备,由体感识别摄像机识别设备的距离和移动。而Kinect则完全摆脱了手持设备的使用,完全基于体感摄像头来识别人体动作。尤其随着虚拟现实技术的发展,越来越多的虚拟现实头盔设备出现,虚拟现实游戏逐渐开始走入人们的生活。目前虚拟现实设备主要有HTC Vive、Oculus Rift、Gear等,虽然设备技术先进,但仍然未能摆脱手持设备的使用,这造成了虚拟现实的体验感不强、感受不深刻等问题。尤其在游戏体验中更加会出现操作复杂、控制不便等问题。因此,采用Kinect开发一款游戏控制系统具有相当重要的价值。

1 动作识别

1.1 Kinect骨骼识别原理

Kinect体感摄像头是由微软公司对出的一款體感识别器,其采用光编码技术进行连续的照明,也即是结构光技术的一种。但区别于一般的结构光方式,Kinect光源发射的并非是一组周期变化的平面编码,而是具有一定纵深的三维格式编码。当这种光源照射到物体表面后会形成激光色斑。当光源发射到空间中进而照射到不同的物体时,就会形成不同的色斑图案,通过判断色斑图案即可以判断物体的位置。而识别人体动作也采用此种技术,基于事先完成的存储的人体数据,通过判断光源照射到人体形成的色斑进行特征提取和比对,根据色斑的运动识别人体关节并最终生成骨骼和结点数据,如图1。

通过Kinect识别人体将人体进行特征提取的骨骼系统和关节结点数据包括头部、左右肩、左右手等20个结点,这些结点能有效跟随人体的移动而在三维空间中移动,因此在判断一个人体动作时,可以通关判断各个关节结点的相对位置、速度等变量,与编辑好的动作集进行数据比对,就可以进行动作的识别。

1.2 动作识别方法

人体做出的所有动作都是通过各个关节组合完成,因此识别动作可以直接识别关节数据及其他相关信息即可,因此可以将人体的多有动作进行特征提取。通过将人体动作简化,直接提取动作的关键特征进行判断,再进行与结点数据的结合最终形成动作的识别方法。例如,通过特征提取方法可以发现,完成左手举手动作时,左手结点平行或高于左肘结点,且高于左肩结点。此时,当一个动作满足上述条件时就可以认定为完成了左手举手的静态动作。同理,当识别左脚抬起时,可以进行特征提取,当左脚结点位置高于右脚结点位置,且左膝结点位置高于右膝结点位置,即可认定为左脚抬起动作完成。因此,将所有结点通过三维空间坐标记性标记,获取position.x,position.y,position.z位置参数,并通过结点特征以三维参数为基础作为判断结果。以左手抬起为例,当LH.position.y>=LE.position.y&&LH.position.y>LS.LH.position.y时,即认定为左手抬起动作完成。当LF.position.y>RF.position.y&&LK.position.y>RK.position.y时,即认定为左脚抬起动作完成。

基于Kinect的动作识别除了可以识别静态动作以外,还可以进行动态动作的识别。结合静态动作识别的基础,即可完成动作识别动作的特征提取。通过特征提取可以发现,动态动作可归纳为多个关节结点的动作组合,以右手挥手为例,当右手从后向前挥手时,可视为右手结点位置高于右肩及右肘位置,且右手位置有从后向前的变化,采用特征提取可以认为,当RH.position.y>RE.position.y>RH.position.y时,右手举起,且随着时间推移RH.position.z1(挥手前右手坐标深度)>RH.position.z2(挥手后右手坐标深度),此时可以认定为右手挥手的动态动作完成。由此为基础可以进行基于Kinect的动态动作识别。

2 游戏控制系统实现

根据动作识别方法,本文采用Unity结合Kinect进行游戏控制系统的研究与实现。Unity是一款集二维游戏、三维游戏、虚拟现实开发功能为一体的专业游戏引擎,是目前游戏行业内非常流行的一款软件。由于其对于物理系统、UI系统、地形系统等优秀的封装,以及对包括PC端、PlayStation、IOS、等多平台支持,以及对目前虚拟现实插件的兼容性而广受专业开发者好评。采用Unity结合Kinect开发的游戏控制系统可以有效的支持多平台研发。

为了游戏控制系统实现,首先进行Unity与Kinect连接环境配置。需要安装Kinect SDK以使Unity能正确识别Kinect,然后导入kinectWrapper.unitypackage并在Unity中打开,此时可以开始进行游戏控制系统实现。打开工程文件可以发现其中存在多个脚本,DisplayDepth可以识别深度图像,SkeletonWrapper可以获取骨骼结点的数据等,Kinect KinectModelControllerV2脚本需要将其拖放到你需要应用kinect控制的模型上。为了使模型可以与操作人员的动作同步,要将模型上与模型动作相关联的关键骨骼拖放到这个脚本现实出来的的相匹配的变量中,即模型中的骨骼与Kincet识别到的人的骨骼结点进行绑定。这个脚本现实的变量中,有变量用来标识模型是受哪个人物控制,因此可以将需要控制的模型拖入此变量内使用。之后可以发现在Unity中已经可以看到对于连接Kinect后可识别的多个骨骼结点,如图2。

最后,对于关键游戏控制系统的实现使用KinectPointController脚本进行编写。

打开KinectPointController脚本,可以发现在脚本中存在20个骨骼结点的GameObject,如图3。采用动作识别方法进行代码编写,以右手挥动为例声明动作识别方法public void RightHandWave();在方法中识别肘结点和肩部结点的相对位置,if(Elbow_Right.transform.position.y>Shoulder_Right.transform.position.y)则认为有肘结点位置高于右肩结点位置,此时认为举手动作完成。然后识别挥手动作,判定右手位置随时间改变的Z轴坐标。首先记录原始坐标former,和随时间改变的动态右手坐标now,并进行变量赋值former = now,now = Hand_Right.transform.position.z。根据特征提取方法,右手挥手可以视为右手结点z坐标深度随时间改变而变大,因此if (former < now)可以认为挥动动作完成。为了防止人员在操作时出现抖动导致识别失败,需要编写防抖动代码,即if(former - now<0.05)认为人员只是无意识抖动手臂而执行非挥手动作。在人员执行挥手动作时,需要识别挥手动作的快慢,因此添加时间变量来进行识别,分别记录挥手动作的起始时间TS和TE终止时间,并记录起始位置PS和PE并计算相对位移D,即可采用公式F=D/(TE-TS)进行力量大小F的识别。完成识别后,进行数据反馈return F即可将数据返回到方法中进行游戏的控制。以此为基础,编写游戏控制代码方法RightHandWave、LeftHandWave、RightFootUp、LeftFootUp等动作识别方法。

在Unity中创建场景,并将制作好的任务模型放入场景中创建游戏人物。创建Animator Controller,在其中使用动画片段制作任务动作树,并放置入游戏人物中,编写代码继承RightHandWave、LeftHandWave、RightFootUp、LeftFootUp方法,编写代码使人物进行投篮动作if(F>0){ this.transform.GetComponent().wave=true},即可看到人物执行投篮动作,可以知道游戏控制系统制作正确。以此为基础可以进行各种游戏控系统的设计及研究。

3 结论

本文通过基于Kinect的动作识别方法,集成Unity的关键技术,采用特征提取手段,最终完成游戏控制系统的研究与实现。该系统可以有效识别人物的基础动作,包括举手、挥手、抬脚、踢腿等动作,以此作为基础控制Unity中的游戏人物进行各种操作。此游戏控制系统将所有可识别的动作编写成方法并进行封装,具有一定的重用性和靈活性,可以为其他开发人员提供一定的参考和帮助,并减少了重复开发的工作开销,具有一定的实践价值。同时,本系统也并不完善,对于更加细致的动作和组合动作不能较好的识别,今后也将继续研究,强化动作识别和游戏系统的结合,完成更加精细的游戏控制系统。

猜你喜欢
控制系统游戏
游戏
数独游戏
基于PLC的自动切蛋糕机的控制方案
Ka频段卫星通信自适应抗雨衰控制系统设计
疯狂的游戏
基于PLC的钢厂热连轧感应加热炉控制系统实现
爆笑游戏
风力发电机组电气与控制系统快速检修思路探索
第八章直接逃出游戏
第八章 直接逃出游戏