基于节奏识别的体感音游设计与实现

2023-04-14 17:40叶元卯罗涵中屈沐妍王哲昊张志鸿
电脑知识与技术 2023年6期
关键词:游戏设计

叶元卯 罗涵中 屈沐妍 王哲昊 张志鸿

摘要:伴随信息科技的发展,人们的人机交互需求日渐增加,作为人机交互的媒介的Leap Motion设备应运而生。该文利用Leap Motion对手势的检测与识别,结合Unity3D游戏引擎对识别结果进行处理,并创建出根据音乐节奏变化的游戏基本框架,开发出一款依据手势识别进行操作的音乐游戏。该系统可以识别简单的音乐,按节奏生成方块并下落,玩家根据听到的节奏利用手势变化碰撞方块并消除。实践结果证明该系统识别程度高、效果好,但对于复杂音乐的节奏识别有较大误差,需利用专业的节奏识别插件消除误差。

关键词:Leap Motion;Unity3D;节奏识别;体感音游;游戏设计

中图分类号:TP311    文献标识码:A

文章编号:1009-3044(2023)06-0008-04

开放科学(资源服务)标识码(OSID)

0 引言

从电子游戏诞生以来,人类就一直在探索最适合游玩电子游戏的设备,从一开始的街机到电视游戏主机,再到后来将办公用的键盘鼠标用于游戏。而近些年,体感识别游戏设备层出不穷,重力感应[1]、红外感应、手势识别[2]、人体识别等体感识别功能丰富多彩,发展到最后,VR、AR等概念深入人心。随着近年来元宇宙概念的兴起,作为元宇宙中最能体现真实性的一环,体感识别也随之“翻红”,人们再一次意识到,也许体感控制游戏才是电子游戏操控设备的终极方式。

自从2006年日本任天堂公司通过游戏手柄第一次将体感识别引入电视游戏主机后,体感游戏设备便不断发展,期间有微软为游戏主机Xbox发布的Kinect用于识别人体动作的体感设备,也有类似索尼推出的配套PS VR使用的PS move用于识别手部动作的体感设备。除了科技巨头公司为自己的游戏主机推出的配套体感设备外,也有一些公司通过专门制作体感识别设备,为游戏开发者与玩家提供廉价、便携且可跨平台使用的体感控制器,Leap Motion便是其中之一[3]。

Leap Motion是美国LEAP公司出品的一款以手运动捕获为主的体感控制器,利用红外成像的原理,获取手的运动图像,检测并跟踪手、手指和类似手指的工具,可以实时获取它们的位置、手势和动作,并将这些静态与动态信息提供给开发者,以达到一种自然人机交互的效果。Leap Motion采集的基本单位是帧,具有很高的捕获精度。

1 系统分析与设计

制作基于节奏识别的体感音游,需要使用Leap Motion控制器对用户的手势进行识别,在UI界面中进入游戏操作,在游戏中根据音乐的节奏,生成下落的立方体,通过对虚拟手模型与立方体进行碰撞检测,利用得分系统进行得分,并最终展示分数。

1.1 UI界面

UI界面是连接用户和游戏的窗口,是任何游戏中十分重要的一部分。UI界面可以在瞬间展示给用户许多信息,也能让用户快速判断当前游戏的状态与接下来要进行的行为。在该系统中UI界面分为两部分,首先是进入游戏前的主菜单界面,该界面拥有“开始游戏”和“退出游戏”两个选项,可以让玩家在确认自己已经做好准备时自行开始游戏,不至于突然开始游戏,让人措手不及。同时主菜单界面也需要用手势控制以开始,这样在游戏开始前便检测出手势识别是否正确,避免进入游戏时因手势识别错误导致游戏错误运行。另一部分UI界面则为进入游戏内的分数显示,用户可以实时看到自己当前的分数,了解自己在本次游戏中操作是否到位,激励用户不断强化自己的操作,从而获得更高的分数。

1.2 手势识别

手势识别是本系统中最重要的一环,所有的行为、操作均基于Leap Motion控制器对手势的体感识别,并由这些手部的动作输出相应的指令。LeapMotion将采集到的手掌、手指的位置和其他信息保存在一帧(Frame)中,并分配唯一的ID,算法通过检测帧中数据的连续性,生成运动信息。而该系统读取手势运动信息的横坐标移动信息,转换为场景中用于控制碰撞挡板的横坐标运动指令,从而达到手势识别的效果。

1.3 音乐节奏分析

音乐节奏是本系统中游玩的主要要素,用户需要根据音乐节奏通过手势控制场景中的挡板左右横移以碰撞立方体从而得分。而立方体是根据音乐节奏生成的,因为立方体从屏幕顶端生成到下落至挡板所在水平高度需要一定时间,所以不可能按照音乐的节奏来生成立方体,而是要提前根据音乐的节奏手动设置好立方体的生成时间,从而使立方体与用户控制的挡板碰撞时,刚好能對上音乐的节奏,达到节奏识别的目的。

1.4 碰撞检测

本系统中将音乐的节奏重音物化为一个个立方体,而用户游玩的操作则是控制场景中的挡板左右移动,并碰撞到这些代表音乐节奏的立方体,故而碰撞检测是该系统中必需的。首先要检测挡板与立方体的碰撞,这是用户正常游玩并根据节奏消除立方体时的碰撞检测,得分增加。其次还要在立方体超出界外进行碰撞检测,因为此时代表用户未能将此立方体按节奏消除,此时为用户的一次失误,需要进行扣分。

之所以要在每次碰撞时销毁立方体,是因为过多的立方体堆积会占用大量资源,从而可能使游戏卡顿甚至崩溃。

1.5 得分系统

得分系统是本系统的精华部分,有了得分功能,就能激励用户反复游玩并超越自我,若没有得分系统,用户在游玩一遍后便不会再想继续游玩,这是任何游戏制作者都不愿意看到的情况。此外,实时显示游戏分数也是激励用户的手段之一,用户在不同场次游戏中的同一时间节点看到的分数不同,势必会在用户心理上产生影响,会让他们提前意识到这局游戏得分会更高还是更低,从而影响在后续游玩中的战术是选择更加谨慎抑或是放手一搏。

2 系统具体实现

2.1 前期准备与环境搭建

2.1.1 前期准备

首先,需要购置一个Leap Motion Controller,这是本项目进行体感识别的主要设备。其次,需要下载好Unity3D游戏引擎,且必须是5.0及以上版本。将Leap Motion Controller连接电脑,在Ultraleap[4]官方网站下载好Leap Motion Controller的配套软件Ultraleap Tracking Software,如果Leap Motion Controller配置成功,则Ultraleap Tracking Software图标会显示为绿色,并且显示“Ultraleap tracking device connected”字样,此时前期准备完成。

2.1.2 环境搭建

打开Unity3D游戏引擎[5]并且新建一个项目,在该项目中创建好场景。在Ultraleap官方网站下载UNITY包文件 (.UNITYPACKAGE),可以用.unitypackage文件获取用于Unity的Ultraleap手部追踪插件。进入Unity3D游戏引擎中新建好的项目,右键单击Assets窗口,转到Import Package并左键单击Custom Package,找到Tracking.unitypackage并导入。这包括核心、交互引擎和手模块。核心模块是Unity 和 Ultraleap 手部跟踪软件之间的最小接口,渲染一组基本的手,将对象附加到手关节等。交互引擎是手和 VR 控制器的物理表示,通过交互启发式进行微调,以提供功能齐全的交互API,包括抓握、投掷、稳定的“软”碰撞反馈和手部接近检测,还附带了一套示例和预制件。手模块是一组脚本,可帮助用户将 Ultraleap 数据绑定到自己的手部资产。提供装配用户自己的 3D 手部资产所需的工具,包括强大的手部自动绑定工具,还配备了一系列优化和装配的手模型,导入成功后,前期准备与环境搭建成功。

2.2 UI界面

本系统中的UI界面主要分为两部分:一部分是进入游戏的主菜单界面,另一部分是游戏内得分及音乐结束时的结算界面。

2.2.1 主菜单界面

主菜单界面中,最上方白色字体为本系统的标题,中间左右两边圆圈代表“开始游戏”和“退出游戏”,用户控制虚拟手移动来操控左右2个小方块移动,通过获取小方块的坐标位置来判断小方块是否放置在某个圆圈内,当放置时间超过2秒即会执行该圆圈代表的方法:“开始游戏”为执行SceneManager.LoadScene(1)跳转至游戏开始场景;“退出游戏”执行Application.Quit()直接关闭游戏。

2.2.2 游戏内界面

游戏内界面既有左上角的实时得分显示,又有音乐结束时的结算面板。

左上角得分显示中,分数会随着方块与挡板或Deadline的碰撞,通过函数score.text = sc.ToString()进行加减更新,其中sc为脚本中的分数变量。

结算面板会提示“已完成”,并显示最终得分,左右下角两个选项分别对应SceneManager.LoadScene(0)跳转至主菜单和Application.Quit()直接关闭游戏。同样是通过获取小方块的坐标位置来判断小方块是否放置在某个圆圈内,当放置时间超过2秒即会执行该圆圈代表的操作。

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,并添加同名脚本,在脚本内声明左右手模型、LeapProvider[8]以及手势操控控制的挡板。再用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 float[64];

audioSource.PlayDelayed(1.6f);

}

void FixedUpdate()

{

curTime += Time.fixedDeltaTime;

audioSource.GetSpectrumData(samples, 0, FFTWindow.Blackman);

if(flagTime>0.1&&samples[0]>0.1)

{

Debug.Log(curTime);

flagTime = 0;

}

flagTime += Time.fixedDeltaTime;

}

其中,变量samples是对音乐片段的采样频率,此变量数据必须为2的幂数,频率越大采样越精细。而FFTWindow是频谱分析窗口化类型,FFTWindow.Blackman为常用的一种变量,代表[Wn=0.42-0.5*cosnN+0.08*cos2.0*n/N]。

2.4.2 根据节奏生成立方体

将时间节点记录下来,计算出立方体从生成到下落至手势所控制挡板的高度所需的时间间隔,将这些时间节点减去时间间隔,即得到一组生成立方体的时间节点,在这组时间节点对应的时间生成立方体,则得到符合音乐节奏的立方体碰撞效果。

除此之外,为增强视觉效果,生成的立方体均带有拖尾,实现方法为在立方体的预制体中添加Trail Renderer组件,将Time设置为0.5,Min Vertex Distance设置为0.1,并在CubeControl脚本中为生成的立方体随机设置拖尾的颜色。

2.5 碰撞检测

在手势控制的挡板添加Box Collider碰撞体组件,并勾选is trigger设置为触发器,为挡板设置标签“Hand”。为生成的立方体预制体添加Box Collider碰撞体组件和Rigidbody组件使其正常下落。添加脚本判断挡板和立方体碰撞时立方体销毁。

此外,在场景最下方添加一个空物体Deadline,设置标签“Deadline”,添加Box Collider碰撞体组件并将碰撞体体积设置为横跨从左到右整个屏幕,当立方体碰撞到该空物体时,代表该立方体已经错过和挡板碰撞的机会,即为一次失误,此时立方体销毁。

2.6 得分系统

在立方体碰撞到挡板销毁时得分加5,碰撞到Deadline销毁时得分减10,CubeControl脚本中负责计分的sc变量会相应改变,并且实时传输到UI的“得分”右侧。

与此同时,在每次游戏结束时,会将UI中的分数字段传输给结算面板的得分字段。此外,为了增加得分或失分时用户的可观测性,还会在得分或失分位置显示“Perfect!”或“Miss!”文本,且该文本会随时间而逐渐透明直至一秒后消失。

3 结束语

科技不断发展,生活也日新月异。随着5G时代的来临。“元宇宙”等虚拟现实概念不断被提起与实践,人们不断认识到体感识别的广阔前景,而体感游戏则是体感识别应用方向中不可忽视的一大领域。本文旨在为体感识别在音乐游戏上的可行性进行试验与尝试,结果大体能让人满意。但美中不足的是,首先当前体感识别技术还有待提升,精确度并不像传统的鼠标键盘那样可以达到近100%的准确识别,且识别的范围也非常有限,一旦超出范围便完全不能识别;其次在对音乐的频谱、鼓点进行分析并运用于游戏的节奏时,由于并没有利用专业的频谱解析软件,所以准确率不够高,对于复杂的音乐难以得到令人满意的效果,这些都是后续开发中有望继续提升的部分。但总体而言,本课题对于体感音游的探索有一定价值,可以为其他类似项目提供经验,值得开发者借鉴,具有推广价值。

参考文献:

[1] 胡弘,晁建刚,林万洪,等.Leap Motion虚拟手构建方法及其在航天训练中的应用[J].载人航天,2015,21(3):257-262.

[2] 李楊韬,禹东川,靳来鹏,等.基于LeapMotion手势识别的认知训练系统的设计和实现[J].电子设计工程,2016,24(9):12-14,18.

[3] 林书坦,尹长青.基于LeapMotion的数字手势识别[J].电脑知识与技术,2015,11(35):108-109.

[4] ULTRALEAP PLUGIN FOR UNITY[DB/OL]. [2022-01-20].https://developer.leapmotion.com/unity#setup-unity -packages.

[5] Unity - Scripting API[DB/OL].https://docs.unity3d.com/ScriptReference/ index.html.

[6] 周家乐,贺元昭,章艺敏,等.基于Leapmotion的VR钢琴及手势识别的设计与实现[J].电子测试,2020(21):5-9.

[7] 杨曦中,万华根.一种基于LeapMotion的灵巧虚拟手抓取交互方法[J].航空电子技术,2021,52(3):1-8.

[8] 朱惠娟,王军,朱俊.基于Leap Motion的沉浸式体感交互系统研究[J].微型电脑应用,2021,37(2):8-11.

[9]杨森淼,朱俊亦,李佳芳. 基于Leap Motion的VR交互系统[J].中外交流,2021,28(5):436.

[10] 胡弘,晁建刚,杨进,等.Leap Motion关键点模型手姿态估计方法[J].计算机辅助设计与图形学学报,2015,27(7):1211-1216.

【通联编辑:唐一东】

猜你喜欢
游戏设计
以“玩”激趣
VR技术现况及其未来对游戏设计的影响
小学低年级语文游戏教学设计探讨
让小学英语阅读教学焕发生机
分析小学体育游戏的设计与合理运用