1. 引言
现今社会,随着科技的高速发展,软件的更新换代,游戏的形式也渐渐发生改变。例如基于体感技术的人机互动游戏悄然萌芽,渗透到人们的生活中。
相比于传统游戏,体感游戏让用户以更为自然直接的肢体动作对机器发出指令,机器通过分析用户的动作,按照预先设定的模式,来作出相应反馈。这种游戏模式改变了玩家与游戏之间互动方式,通过丰富的肢体动作与游戏互动,甩掉鼠标和键盘,深受玩家青睐 [1] 。
本文利用Unity3D游戏引擎和Kinect体感设备,设计并实现了一款体感类的切水果游戏。首先,在Unity3D环境中进行以c#语言为基础的脚本编写,创建游戏对象并设计整体游戏的得分逻辑关系与函数封装。其次,通过Kinect设备发射红外线,探测红外光反射,来获取的深度数据,由此提取人体体感数据,主要需要玩家双手骨骼点信息,并转化为坐标信息,完成人机交互。将获取到的信息传入脚本程序中,使各部分连为一体。玩家只需挥动双手,消除游戏界面中弹出的游戏对象即可得分,通过累加分数至一定值,达到过关晋级的游戏效果。
2. Unity3D游戏引擎
Unity作为一款基于跨平台的游戏开发引擎,以其易操作,支持语言丰富,自动化程度高,兼容性强而著称,而且被广泛应用于互动系统的开发,比如建筑可视化、虚拟现实、三维视频游戏等。
由于其编程界面可视化,便于开发,脚本编辑高效,本款游戏选择直接在Unity5.0.1平台上,利用C#语言,完成了游戏模块划分及功能实现。而且,Unity支持3D模型,可直接导入骨骼和动画,并将贴图材质自动转换为U3D格式,这也极大地方便了Kinect获取的图像信息转化为游戏背景 [2] 。
此外,在基本技术操作上,Unity3D平台的出众的开发效率和优越的性能、性价比也为本研究创造了便利的条件。
3. 体感技术
随着科技的发展,人机交互模式已开始出现用自然、感官技术来替代电脑的键盘和鼠标等外设,体感技术应运而生 [3] 。
体感技术,一种通过对动作进行感应达到控制显示的技术,即人们可以运用肢体动作或声音与计算机进行交互 [4] 。其原理为设备采取人体骨骼及姿势数据,转化成数字信号传回电脑,实现人机交互 [5] 。依照体感方式与原理的不同,目前主要有机械式、光学式、电磁式、惯性、声学等体感识别技术。利用体感技术实现人机交互,最大的优点在于它允许人们通过思维引导肢体运动,实现全身心投入。而且,体感游戏改变了玩家与游戏的互动方式,让用户甩掉鼠标和键盘玩游戏,通过语言、手势等动作操纵游戏画面中的人物,带入感强,拘束度小,备受广大玩家青睐。
2010年11月微软公司于推出了一款体感外设——KINECT [6] 。实际上,KINECT是一种实时进行运动捕捉、麦克风输入等功能的3D 体感摄影机。其原理为通过红外感应,采集深度信息及人体关节点信息,来识别人体运动姿势及周围环境图像。通过Kinect,人们只需做简单的动作即可实现计算机的实时交互 [7] 。当Kinect与体感技术相结合,即可实现玩家用身体操控的整个过程的游戏,方便简单,适合各个年龄段用户,发展前景良好。
4. 应用案例与分析
针对传统游戏存在的界面保守,操作单调的问题,本研究为提高用户游戏愉悦感和舒适度,结合了Unity3D开发平台,及体感技术,开发设计了一款切水果体感游戏。
1. 游戏简介
本款基于Unity3D技术的体感切水果游戏,以Kinect获取到的当前所处环境作为背景图。初始分值为0,初始生命值为5。
玩家通过身体控制游戏中“刀刃”,“玩家”的图像来源于KINECT 识别到的骨架数据,刀刃绑定了骨架中HandLeft 和HandRight的坐标属性。
游戏过程中,不断有水果和小动物跳出,玩家需在水果消失前,切中跳出的水果,切中与否运用了射线碰撞检测技术,当代表刀刃HandLeft 和HandRight的坐标与水果的碰撞盒相碰,代表切中水果。切中水果得分,切中小动物扣分,未切中水果减命,当生命值清零,游戏结束。当分数达到300分,过关,进入下一关卡。
本游戏画风简约,操作简单,适合作为休闲娱乐使用。
2. 游戏实现逻辑过程
1) 获取游戏背景
Kinect通过相应的API可获取到彩色图像,将其转换为texture格式,设为游戏背景图。
2) 游戏元素的生成
首先建立游戏元素预制体,本游戏包含水果预制体和小动物预制体(其中水果为游戏的消除对象,切中后出发加分逻辑,小动物为保护对象,如果被误切中,则会触发减分逻辑),为其添加物理属性,在rigid body属性中可为其添加重力属性(Use Gravity),定义其初始坐标为负,再给定一个向上的初速度,使其从画面下方弹出,到达界面顶部后自由落体,以比较自然的方式出现在屏幕画面中(如图1)。
3) 切中水果逻辑
首先,利用Kinect设备获取玩家手腕处骨骼数据,采集玩家手势挥动情况,获取双手的位置数据。体感设备获取到的骨骼数据,以图像中心点为坐标(0, 0),图像左下角坐标为(−1, −1),右上角坐标为(1, 1),获取到手部骨骼点的坐标是在图像的相对坐标位置,即它的横纵坐标都在(−1, 1)之间,假如体感设备获取到的左手骨骼点坐标为(x0, y0),将其转化为屏幕坐标(x, y)的公式如公式一所示,其中Screen.width为屏幕的宽度,Screen.height为屏幕的高度。


Formula 1. Coordinate Position Transformation
公式1. 坐标点转化公式

Figure 1. The interface of generating game elements
图1. 游戏元素生成界面
其次,本着两个不可穿透的实体不能共享一个空间区域的原理 [8] ,我们在box collider属性中,为prefab添加碰撞盒,通过在相应位置发射射线,来检测两个物体之间是否发生了碰撞,如果检测到碰撞,则出发成功切到逻辑并触发碰撞后表现的特效,即物体在碰撞后能自然弹开,溅射果汁等效果。
通过射线碰撞检测技术,如图2 [9] 在三维空间内,判断获取到的手部骨骼点坐标发出射线 [10] ,在与水果碰撞盒之间的有限的距离内,若射线与碰撞盒发生碰撞,则认为二切中水果,并返回碰撞点即被切中水果的位置信息,利用该位置信息,做后续的逻辑处理。此时界面根据玩家动作产生相应弧度的刀刃,完成人机交互。
4) 得分逻辑
本游戏在Unity创建游戏对象时,已提前为每个游戏对象设置了tag标签并赋予其不同属性;在脚本编写过程中,将不同游戏对象的得分逻辑封装在不同函数中,最终只需通过所切中游戏对象的名字和标记即可判断切中的游戏对象类型及是否得分。体现在游戏界面中即为玩家可自由选择消除不同水果或小动物。
5) 玩法简介
本游戏为玩家累计一定分值,从而过关的益智类小游戏。游戏过程中,界面下方不断有水果和小动物跳出,玩家需避开小动物,切中水果。切中水果,加10分,未成功躲避而切中小动物,减50分;若遗漏水果,直至其消失于界面仍未切到,减命1条。初始分值为0,命为5;分数清空,游戏不结束;生命值清空,游戏结束;当分值达到300分,成功过关。不同关卡可调节水果弹出的速度与种类,画风简单轻松,适合各年龄人群(如图3)。
6) 实现效果
本文最终实现了一款可以支持多人同时参与的切水果体感游戏,游戏执行效果如图4所示,多人可以同时利用自己的双手切除画面中产生的水果,而且,随着双手的运动轨迹产生彩色拖尾效果。切中水果加分,切中小动物模型减分,分数显示在如图4左上角处,若直至水果调出界面仍未切中,命数减一,如图4中右上角所示。玩家可点击左下角处喇叭按钮选择游戏音效:外放或静音。

Figure 2. Schematic diagram of ray collision detection
图2. 射线碰撞检测示意图

Figure 3. The flow chart of the whole game
图3. 整体游戏流程图
5. 结束语
本款基于unity3D技术的切水果体感游戏,不需要昂贵复杂的设备支持,只需连接Kinect外设,即可让玩家自由用任意姿势切中水果。不同于传统游戏中键盘和鼠标的束缚及单一化交互模式,本体感游戏极大增强了玩家的角色带入感,既增强了玩游戏时的愉悦感,又使肌体得到锻炼。本着“运动与娱乐相结合”的理念,本研究极具发展前景。而且随着体感技术的日益成熟与完备,这种寓教于乐同时还能锻炼身体的大型体感游戏必将得到大规模的推广。如何实现多感官操作,并使大众广泛接受体感游戏将成为我们下一步研究目标。