基于Unity3D的音乐游戏制作
2021-11-03张贝贝
DOI:10.19850/j.cnki.2096-4706.2021.08.031
摘 要:Unity3D是目前国内相对流行的游戏开发软件,而音乐游戏也是自游戏发展以来就极其盛行。文章基于Unity3D开发制作了一款音乐游戏,其主要功能包括人物控制、按键消音、乐谱管理、分数统计、UI界面与音效以及特效播放。该游戏与传统音乐游戏不同,添加了动画人物以及打击动作,使音乐游戏与动作游戏相互结合。通过此游戏,玩家们能够在游玩之余享受音乐以及通关的乐趣。
关键词:Unity3D;C#;FL Studio
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2021)08-0112-04
Music Game Making Based on Unity3D
ZHANG Beibei
(School of Computer and Software,Jincheng College of Sichuan University,Chengdu 611731,China)
Abstract:Unity3D is a relatively popular game development software in China at present,and music games are also extremely popular since the development of the games. In this paper,a music game is developed and made based on Unity3D. Its main functions include character control,key silencing,music score management,score statistics,UI interface,sound effect and special effect playing. The game is different from the traditional music games,adding animated characters and strike actions,which makes music games and action games combine with each other. Through this game,players can enjoy music and clearance fun while playing.
Keywords:Unity3D;C#;FL Studio
0 引 言
当今社会发展飞速,人们生活节奏快,碎片化时间比较多,多数人更愿意选择玩一些简单易操作又不易沉迷的游戏来放松。而根据中国音数协游戏工委(GPC)与国际数据公司(IDC)共同发布的《2020年度第一季度中国游戏产业报告》,受新冠肺炎疫情影响,“宅经济”大热,游戏业保持了非常高的增速,且随着科技的发展,不少优秀的游戏引擎也更新换代。本文采用的Unity3D是一款发展成熟的开发引擎,极大程度上方便了个人进行游戏的开发设计,降低使用的难度,提高了开发者的效率。而音乐游戏类型则是要求玩家在听到相应的音乐后,根据节奏等因素按下按键消除音块,以获得分数。玩家的最终目的是在尽可能不漏音块的前提下更加精准地按下按键来获得更多分数。
1 游戏设计
1.1 玩法设计
本音乐游戏采用常规的下落式音块,以及按键来控制小人攻击,攻击到音块来达到消音的功能。游戏场景中,会不断有音块按照一定节奏落下,当落到最底端的人物部分的时候,需要按下相应的按键才可以启动按钮,如果按早或者按晚了,得分就会低,只有在人物的攻击刚覆盖按钮的时候才会得到最高的分數。而在按下了按钮后,音块会消失,并且播放对应音乐中的音符声与特效。玩法流程如图1所示。
1.2 场景设计
该场景模仿同类游戏Deemo中的简洁场景,只有落下的音块和下方的4个按键人物组成,以此来使玩家体会到最沉浸的游戏体验。背景采用了与音块对比色较大的白色调背景,并且音块采用了渐变色以使玩家能更轻松地分辨不同音块位置,提升玩家的游戏体验。并且在游戏中消音会有特效播放,该特效会提醒玩家消音成功,可以提升游戏的流畅性。
1.3 人物设计
为了使游戏有更好的游戏节奏,游戏人物选择了2D横版的游戏角色,而攻击动画制作快速不冗杂,使玩家玩游戏的时候不会因为攻击动画影响手感。由于音块分为鼓点与钢琴音,所以选择了大锤角色来攻击鼓点,单手剑角色来攻击钢琴音。空闲时人物会进行空闲动画,攻击则播放攻击动画,游戏完成时播放庆祝动画。
1.4 音乐设计
由于是音乐游戏,游戏类型特殊,所以对于音效的要求高于其他游戏。需要在编辑软件FLstudio中,使用钢琴音将乐谱扒取下来,并且进行修改调整,最终导出。然后将该音乐中所使用到的音符以及鼓点单独导出,为后续的音块制作做准备。对于不同乐曲有不同的节奏,即BPM,所以根据不同的节奏来整理不同的乐曲难度,相对的难度越高,音块越多。目前制作的音乐有:Dream,samurai 45,the truth that you leave,第105天,千本樱等。
1.5 关卡设计
音乐游戏这一类型在让人感受到音乐魅力的同时也要最大限度地让人体会到演奏音乐的乐趣,而游戏中的音块又因音乐的特殊性无法进行批量孵化,所以最终采用的是音块摆放的方式。不同的音乐设置不同的关卡,而在关卡中则通过调整音块的下落速度、音块之间的距离来起到符合音乐节奏的作用;将关卡中的不同音块错位摆放,从而模拟在琴键上演奏乐曲,让玩家可以体会到更多的乐趣。
1.6 UI设计
该游戏UI采用了简洁的设计,主要是为了让玩家可以更加沉浸在游戏中,其中包括了开始游戏、关卡选择、难度选择、以及游戏中暂停、重新开始、回到主菜单等功能。UI中还包含了对于分数的统计,以及对是否漏掉音块的判断。
1.7 功能设计
功能主要分为系统功能和游戏功能,其中系统功能有开始游戏、关卡选择、游戏暂停及游戏结束。游戏功能为角色按键功能,其中包括角色攻击、特效播放、音效播放以及动画播放。游戏中的音块功能分为音块移动、位置判断、函数执行以及音块销毁功能。游戏功能设计如图2所示。
2 游戏主要功能模块详细设计与实现
2.1 场景搭建
游戏场景搭建首先要将背景图片放入,并且与音块预设对比调整颜色,由于游戏使用的是碰撞体检测来进行音块消除逻辑,所以将人物放入场景而不是UI界面,然后分别摆放游戏管理按钮位置,关卡位置,制作主菜单场景并且分别制作关卡场景。
2.2 音块
2.2.1 音块制作
音块制作在Flstudio中进行初次制作,首先根据要制作的音乐,通过扒谱将乐曲转换成单个音符,再将所有用到的音符单个导出并保存。然后再进行音乐的丰富,添加和弦、鼓点、节奏键,再将所添加的音符单独导出并保存。在Unity中,先制作一个图片精灵,将事先于PS中制作的音块图放入,并且为其添加AudioSource组件,为添加音效做准备,然后添加碰撞体以及控制脚本。
2.2.2 音块动画制作
在音块控制腳本的更新函数中,通过控制音块的位置来进行音块动画的实现,通过transform.Translate(new Vector2(0,-3)*Time.deltaTime, Space.World)语句来分别控制脚本对象的x,y轴,下落的速度以及对应的坐标系。在音块生成时,通过动画控制器为其制作抖动动画与摇摆动画,并且在下落过程中使摇摆动画循环播放。
2.2.3 音块消除控制
在脚本中定义一个整数类型变量存放碰撞的标签类型,初始为0,使用OntriggerEnter函数判断碰撞物标签类型,如果碰撞到的是时机检测标签类型,则根据不同的标签类型为变量赋不同的值,当碰撞到的标签为按钮时,则运行音块消失函数:实例化音效、判断整数变量的值来进行不同特效的实例化与分数的增加,摧毁音块等内容。如果碰撞到了最后放的漏音检测碰撞体则分数减少并且摧毁。
2.3 按键人物制作
2.3.1 人物制作
游戏角色是从Unity资源商店中下载的2D人物模型初稿,模型特点是方正,在导入后为人物添加装饰,武器,特效,并且增加碰撞体组件,增加音效组件,然后将人物放入一个父对象,并且再设置三个子对象作为音块位置检测碰撞体存放位置。
2.3.2 人物动画
每个人物制作一个动画控制,动画有待机动画、攻击动画以及庆祝动画,三个动画均由动画控制器的录制功能制作,将武器放在初始位置,再到结尾时间处添加关键帧,开启录制后更换位置即可。动画制作后调整关键帧之间的时间,使动作干净利落。动画逻辑如图3所示。
2.3.3 人物攻击逻辑及脚本
人物在接收到相应按键后,播放攻击动画,人物的碰撞体启用并在一定时间后关闭,如果碰到了音块则执行音块销毁相关内容,如果不是则播放挥空音效。脚本中使用游戏对象数组存放四个角色,在更新函数中进行按键的判断,如果按下后使用SetActive打开游戏的碰撞体。使用协程函数进行时间控制,在一定时间后将碰撞体关闭。主要代码为:
yield return new WaitForSeconds(keytime);
detects[a].SetActive(false);
if(isattack){
CircleCollider.enabled=true;
StartCoroutine(attacktime); }
IEnumerator attacktime(int a){
yield return new WaitForSeconds(keytime);
CircleCollider.enabled=false; }
2.4 游戏中的碰撞检测
游戏中,针对音块的位置有4种不同的状态,分别是未碰到角色按键区域,碰到角色按键区域前段,中部和后端。分别在角色按键的前方、上方和后方放置三个对应位置子对象并赋予方块碰撞体,为其分别命名标签以此判断按键时音块所处的位置来计算分数。最后在按键后方一定距离处同样放置一个游戏对象并赋予方块碰撞体,该碰撞体目的是判断是否有音块漏过,如有则分数减少并实例化提示特效。主要检测代码为:
if(collision.CompareTag("button"))
{Destroy(gameObject);
GameValue.instance.ScoreTotle+=10;
SoundManager.instance.PlaySound(keysound);
}
if(collision.CompareTag("backdetect")){
GameValue.instance.isFullCombo=false;
}
2.5 分数统计
根据在音块脚本中的按键位置,分为三种分数,过早和过晚按键分数、完美按键分数以及错过按键分数,在音块函数中判断位置后,通过脚本的外部访问,输入分数来进行相应的加减。最终分数将不会在游戏中进行显示,可以通过暂停游戏或者完成游戏来得知自己的分数。分数脚本主要采用实例化进行外部访问。主要代码为:
public static GameValue instance;
instance = this;
Scoretext.text="分数:"+ScoreTotle.ToString()
2.6 UI設计
游戏UI设计模仿了同类游戏简洁明了的样式,在玩家玩游戏的时候尽可能地避免在屏幕中放入过多元素而影响了玩家的游戏体验,所以游戏关卡中只有下落的音块,四个角色按键,菜单呼出键和漏音图标这几个部分。而在游戏外的关卡选择中则会显示音乐封面,点击详情可以提前查看游戏的关卡。
2.7 游戏管理
游戏进入时为主页面,点击即可开始游戏,紧接着为游戏的不同关卡选择,点击左右按钮翻页,后退按钮回到主页面。关卡又对应歌曲封面以及一个预览播放按键组成,点击播放键可以预览之前制作的全部音乐,并且出现相应关卡剪影。点击关卡图片则进入,关卡中有四个角色按钮分别被玩家控制,左上角呼出菜单功能使游戏暂停、重新开始、继续、回到主菜单,并且有分数的提示。游戏管理如图4所示。
2.8 游戏脚本
游戏中制作了按键管理脚本、销毁脚本、游戏完成脚本、游戏控制脚本、游戏值脚本、音效管理脚本、音块脚本、屏幕控制脚本、关卡选择脚本、关卡解锁脚本以及角色控制脚本。
3 游戏测试
3.1 测试环境
游戏由2018.3.9f1版本Unity3D制作,VisualStudio2019进行C#脚本编写,游戏在显卡RX550、CPU为i7,内存16 GB的环境下进行测试。
3.2 测试内容
测试内容为调整不同的游戏分辨率来观察有无界面的错位,按键的丢失;使用不同的电脑来判断是否存在运行错误;不同的玩家测试游戏,并且分享游戏体验来调整不同游戏关卡难度并且进行关卡的等级排序,最终完善一个关卡等级分级。主要功能展示如图5所示。
4 结 论
本项目是使用Unity3D为基础制作的一款音乐游戏,主要功能有音块消除,角色按键控制,音效播放,特效播放,分数统计,菜单与关卡管理。本游戏意在使玩家体验游戏的同时感受音乐给人带来的乐趣,结果表明游戏设计合理,关卡难度分层明确,玩家游玩体验良好,可玩性较高。
虽然这款游戏已经可以达到最初制作的基本要求,但是还有待改进,未来工作是优化游戏代码和模型,并加入更多曲目,角色以及音块类型,希望能给玩家带来更加沉浸的游戏体验。
参考文献:
[1] 张越,陶俊,徐迅.基于Unity3D的塔防类游戏的设计与实现 [J].现代信息科技,2021,5(1):84-87.
[2] 黄福钰.基于Unity3D的历史RPG教育游戏设计开发 [J].电脑知识与技术,2021,17(11):58-60.
[3] 张胜男,司占军.基于Unity 3D的寻宝游戏的设计与制作 [J].电脑知识与技术,2020,16(22):37-39.
[4] 王艳,华唯辰.基于Unity3D的ARPG游戏设计与实现 [J].电脑知识与技术,2020,16(29):199-201.
[5] 刘雨嘉,杨键,冯梦雨.基于Unity3D的VR射击游戏的研究与实现 [J].数码世界,2019(3):44-45.
作者简介:张贝贝(2000—)男,汉族,四川宜宾人,本科在读,研究方向:VR与游戏开发。
收稿日期:2021-03-09