1、本栏目责任编辑:朱宝贵本期推荐Computer Knowledge and Technology电脑知识与技术第19卷第6期(2023年2月)第19卷第6期(2023年2月)基于节奏识别的体感音游设计与实现叶元卯,罗涵中,屈沐妍,王哲昊,张志鸿(华东理工大学,上海 200237)摘要:伴随信息科技的发展,人们的人机交互需求日渐增加,作为人机交互的媒介的Leap Motion设备应运而生。该文利用Leap Motion对手势的检测与识别,结合Unity3D游戏引擎对识别结果进行处理,并创建出根据音乐节奏变化的游戏基本框架,开发出一款依据手势识别进行操作的音乐游戏。该系统可以识别简单的音乐,按节奏
2、生成方块并下落,玩家根据听到的节奏利用手势变化碰撞方块并消除。实践结果证明该系统识别程度高、效果好,但对于复杂音乐的节奏识别有较大误差,需利用专业的节奏识别插件消除误差。关键词:Leap Motion;Unity3D;节奏识别;体感音游;游戏设计中图分类号:TP311文献标识码:A文章编号:1009-3044(2023)06-0008-04开放科学(资源服务)标识码(OSID):0 引言从电子游戏诞生以来,人类就一直在探索最适合游玩电子游戏的设备,从一开始的街机到电视游戏主机,再到后来将办公用的键盘鼠标用于游戏。而近些年,体感识别游戏设备层出不穷,重力感应1、红外感应、手势识别2、人体识别等体
3、感识别功能丰富多彩,发展到最后,VR、AR等概念深入人心。随着近年来元宇宙概念的兴起,作为元宇宙中最能体现真实性的一环,体感识别也随之“翻红”,人们再一次意识到,也许体感控制游戏才是电子游戏操控设备的终极方式。自从2006年日本任天堂公司通过游戏手柄第一次将体感识别引入电视游戏主机后,体感游戏设备便不断发展,期间有微软为游戏主机Xbox发布的Kinect用于识别人体动作的体感设备,也有类似索尼推出的配套PS VR使用的PS move用于识别手部动作的体感设备。除了科技巨头公司为自己的游戏主机推出的配套体感设备外,也有一些公司通过专门制作体感识别设备,为游戏开发者与玩家提供廉价、便携且可跨平台使
4、用的体感控制器,Leap Motion便是其中之一3。Leap Motion是美国LEAP公司出品的一款以手运动捕获为主的体感控制器,利用红外成像的原理,获取手的运动图像,检测并跟踪手、手指和类似手指的工具,可以实时获取它们的位置、手势和动作,并将这些静态与动态信息提供给开发者,以达到一种自然人机交互的效果。Leap Motion采集的基本单位是帧,具有很高的捕获精度。1 系统分析与设计制作基于节奏识别的体感音游,需要使用LeapMotion控制器对用户的手势进行识别,在UI界面中进入游戏操作,在游戏中根据音乐的节奏,生成下落的立方体,通过对虚拟手模型与立方体进行碰撞检测,利用得分系统进行得分
5、,并最终展示分数。图1 系统需求分析1.1 UI界面UI界面是连接用户和游戏的窗口,是任何游戏中十分重要的一部分。UI界面可以在瞬间展示给用户许多信息,也能让用户快速判断当前游戏的状态与接下来要进行的行为。在该系统中UI界面分为两部分,首先是进入游戏前的主菜单界面,该界面拥有“开始游戏”和“退出游戏”两个选项,可以让玩家在确认自己已经做好准备时自行开始游戏,不至于突然开始游戏,让人措手不及。同时主菜单界面也需要用手势控制以开始,这样在游戏开始前便检测出手势识别是否正确,避免进入游戏时因手势识别错误导致游戏错误运行。另一部分UI界面则为进入游戏内的分数显示,用户可以实时看到自己当前的分数,了解自
6、己在本次游戏中操作是否到位,激励用户不断强化自己的操作,从而获得更高的分数。收稿日期:2022-11-15作者简介:叶元卯(1975),男,浙江淳安人,讲师,工学硕士,主要研究方向为虚拟现实,数字媒体;罗涵中(2000),男,湖南郴州人,工学学士;屈沐妍(2001),女,广东深圳人,本科在读;王哲昊(2000),男,上海人,本科在读;张志鸿(2000),男,江苏苏州人,本科在读。E-mail:http:/Tel:+86-551-65690963 65690964ISSN 1009-3044Computer Knowledge and Technology电脑知识与技术Vol.19,No.6,F
7、ebruary20238DOI:10.14004/ki.ckt.2023.0317本期推荐本栏目责任编辑:朱宝贵Computer Knowledge and Technology电脑知识与技术第19卷第6期(2023年2月)第19卷第6期(2023年2月)1.2 手势识别手势识别是本系统中最重要的一环,所有的行为、操作均基于Leap Motion控制器对手势的体感识别,并由这些手部的动作输出相应的指令。LeapMotion将采集到的手掌、手指的位置和其他信息保存在一帧(Frame)中,并分配唯一的ID,算法通过检测帧中数据的连续性,生成运动信息。而该系统读取手势运动信息的横坐标移动信息,转换为
8、场景中用于控制碰撞挡板的横坐标运动指令,从而达到手势识别的效果。1.3 音乐节奏分析音乐节奏是本系统中游玩的主要要素,用户需要根据音乐节奏通过手势控制场景中的挡板左右横移以碰撞立方体从而得分。而立方体是根据音乐节奏生成的,因为立方体从屏幕顶端生成到下落至挡板所在水平高度需要一定时间,所以不可能按照音乐的节奏来生成立方体,而是要提前根据音乐的节奏手动设置好立方体的生成时间,从而使立方体与用户控制的挡板碰撞时,刚好能对上音乐的节奏,达到节奏识别的目的。1.4 碰撞检测本系统中将音乐的节奏重音物化为一个个立方体,而用户游玩的操作则是控制场景中的挡板左右移动,并碰撞到这些代表音乐节奏的立方体,故而碰撞
9、检测是该系统中必需的。首先要检测挡板与立方体的碰撞,这是用户正常游玩并根据节奏消除立方体时的碰撞检测,得分增加。其次还要在立方体超出界外进行碰撞检测,因为此时代表用户未能将此立方体按节奏消除,此时为用户的一次失误,需要进行扣分。之所以要在每次碰撞时销毁立方体,是因为过多的立方体堆积会占用大量资源,从而可能使游戏卡顿甚至崩溃。1.5 得分系统得分系统是本系统的精华部分,有了得分功能,就能激励用户反复游玩并超越自我,若没有得分系统,用户在游玩一遍后便不会再想继续游玩,这是任何游戏制作者都不愿意看到的情况。此外,实时显示游戏分数也是激励用户的手段之一,用户在不同场次游戏中的同一时间节点看到的分数不同
10、,势必会在用户心理上产生影响,会让他们提前意识到这局游戏得分会更高还是更低,从而影响在后续游玩中的战术是选择更加谨慎抑或是放手一搏。2 系统具体实现2.1 前期准备与环境搭建2.1.1 前期准备首先,需要购置一个Leap Motion Controller,这是本项目进行体感识别的主要设备。其次,需要下载好Unity3D游戏引擎,且必须是5.0及以上版本。将LeapMotion Controller 连接电脑,在Ultraleap4官方网站下载 好 Leap Motion Controller 的 配 套 软 件 UltraleapTracking Software,如果 Leap Motio
11、n Controller 配置成功,则Ultraleap Tracking Software图标会显示为绿色,并且显示“Ultraleap tracking device connected”字样,此时前期准备完成。2.1.2 环境搭建打开Unity3D游戏引擎5并且新建一个项目,在该项目中创建好场景。在Ultraleap官方网站下载UNITY 包文件(.UNITYPACKAGE),可以用.unitypackage文件获取用于Unity的Ultraleap手部追踪插件。进入Unity3D游戏引擎中新建好的项目,右键单击Assets窗口,转到 Import Package 并左键单击 Custo
12、m Package,找到Tracking.unitypackage并导入。这包括核心、交互引擎和手模块。核心模块是Unity 和 Ultraleap 手部跟踪软件之间的最小接口,渲染一组基本的手,将对象附加到手关节等。交互引擎是手和 VR 控制器的物理表示,通过交互启发式进行微调,以提供功能齐全的交互API,包括抓握、投掷、稳定的“软”碰撞反馈和手部接近检测,还附带了一套示例和预制件。手模块是一组脚本,可帮助用户将 Ultraleap 数据绑定到自己的手部资产。提供装配用户自己的 3D 手部资产所需的工具,包括强大的手部自动绑定工具,还配备了一系列优化和装配的手模型,导入成功后,前期准备与环境
13、搭建成功。2.2 UI界面本系统中的UI界面主要分为两部分:一部分是进入游戏的主菜单界面,另一部分是游戏内得分及音乐结束时的结算界面。2.2.1 主菜单界面主菜单界面中,最上方白色字体为本系统的标题,中间左右两边圆圈代表“开始游戏”和“退出游戏”,用户控制虚拟手移动来操控左右2个小方块移动,通过获取小方块的坐标位置来判断小方块是否放置在某个圆圈内,当放置时间超过2秒即会执行该圆圈代表的方法:“开始游戏”为执行 SceneManager.LoadScene(1)跳转至游戏开始场景;“退出游戏”执行Application.Quit()直接关闭游戏。图2 主菜单界面2.2.2 游戏内界面游戏内界面既
14、有左上角的实时得分显示,又有音乐结束时的结算面板。左上角得分显示中,分数会随着方块与挡板或Deadline的碰撞,通过函数score.text=sc.ToString()进行加减更新,其中sc为脚本中的分数变量。结算面板会提示“已完成”,并显示最终得分,左右下角两个选项分别对应SceneManager.LoadScene(0)跳转至主菜单和Application.Quit()直接关闭游戏。同9本栏目责任编辑:朱宝贵本期推荐Computer Knowledge and Technology电脑知识与技术第19卷第6期(2023年2月)第19卷第6期(2023年2月)样是通过获取小方块的坐标位置来
15、判断小方块是否放置在某个圆圈内,当放置时间超过2秒即会执行该圆圈代表的操作。图3 游戏内得分界面2.3 手势识别模块2.3.1 虚拟手6-7从官网导入的Tracking.unitypackage包中包含有手模型HandModels,其中有Capsule Hand Left和Capsule Hand Right,导入场景后,再加入Service Provider(Desktop),这是在桌面应用(PC)中对手势进行识别服务的提供接口,能将Leap Motion硬件检测到的数据转化为手模型的手势和动作8。2.3.2 手势识别在游戏场景内添加空物体HandController,并添加同名脚本,在脚本
16、内声明左右手模型、LeapProvider8以及手势操控控制的挡板。再用Leap Motion提供的接口API调用手势的每一个当前帧数据9,将数据传输至声明的Frame变量中,再遍历Frame中的数据信息,将每一帧虚拟手的位置信息转化为挡板的位移信息,从而控制挡板左右移动。此外,在手势控制UI界面内选项时,也采用同样的方法,只不过此时用小方块代替挡板,发挥类似鼠标的作用,小方块可以上下左右二维方向上移动,仅需将对挡板控制中把leftCube和rightCube位置信息的y方向也和虚拟手的位置信息绑定好即可10。2.4 音乐节奏分析2.4.1 识别音乐节奏并输出使用Unity3D游戏引擎内置脚本API AudioSourc.GetSpectrumData(float samples,int channel,FFTWindow window)识别音乐的频谱数据块,并利用 Debug.Log()在控制台输出重音时的时间节点:void Start()samples=new float64;audioSource.PlayDelayed(1.6f);void FixedUpdate()curTi