


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