最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

教程:在Unity中讀取Bestdori自制譜社區(qū)譜面代碼

2023-08-18 13:30 作者:QZM茄汁面  | 我要投稿

由于在自學(xué)制作邦邦模擬器,要想游玩一張自制譜,首先需要讀取譜面文件,讀取成功后才能進行游戲相關(guān)的代碼

光讀取譜面這一部分自己就撞了很多次墻,在網(wǎng)絡(luò)上沒有發(fā)現(xiàn)成文的方法,就把自己的過程分享給大家,少走一些彎路

當(dāng)然,畢竟我也是初學(xué)者,難免出現(xiàn)錯誤,也歡迎大家指正。


1. 修改Bestdori的譜面代碼

Bestdori的譜面代碼乍一看挺規(guī)整,但想直接用json讀取是讀出不來的

bestdori譜面代碼

仔細(xì)一看就會發(fā)現(xiàn):它只是一個數(shù)組,并沒有Json中要求的"鍵名",在讀取前,我們需要聲明一個鍵名存儲值內(nèi)容(這里用data):

有能用的json文件后,接下來要在游戲中讀取了


2. 讀取前準(zhǔn)備

2.1 譜面屬性關(guān)系

首先觀察譜面文件,我們可以發(fā)現(xiàn),所有的節(jié)點都是有type類型的,并且都擁有beat和lane對應(yīng)的值(綠條除外),其它屬性均為附加選項。

直接說不容易理解,我把關(guān)系整理了出來,整體關(guān)系如下所示:

Chart

2.2 根據(jù)關(guān)系聲明對應(yīng)類腳本

2.2.1 通用值

我們首先聲明一個chart類,用于保存單個按鍵的值

對于通用邏輯,直接寫入Chart類中:

由于每個按鍵對應(yīng)一個類型,觀察屬性關(guān)系,可以知道有4個類型,我們聲明一個枚舉類型

往Chart類中添加枚舉

2.2.2 專屬值

根據(jù)type我們已經(jīng)可以單獨獲知該note屬于什么樣的類型,所以其它按鍵的值冗雜在一起也不會有什么影響

綠條內(nèi)部代碼:

※需要注意的是,綠條類本身沒有通用值,都在其子類的數(shù)組中connections存在

滑鍵方向:

3. 在Unity中讀取譜面文件

3.1 讀取json文件

在unity中,有許多可以讀取Json的類,這里使用Newtonsoft.Json

(其實第一次用了LitJson,但是會報錯)

首先需要引用命名空間

我們使用File類進行文件讀取,文件放置在持久化目錄中,路徑也設(shè)置為此處

由于我是直接把bestdori的代碼復(fù)制到j(luò)son文件中的,所以我需要添加前綴

隨后嘗試把讀取到的內(nèi)容轉(zhuǎn)換為對應(yīng)的類

3.2 排序?qū)?yīng)的類

在bestdori的代碼可以亂序,但這樣并不利于我們播放譜面,所以我們需要進行排序

3.2.1 簡單排序

在排序前我按照一定規(guī)則把所有音符都存入到了List當(dāng)中,各位在使用Sort方法時記得要包含原本的對象

3.2.2?計算精準(zhǔn)時間

在實際播放譜面時,使用beat并不方便讀取,我們需要計算每個音符單獨的精準(zhǔn)時間(絕對時間)

可以在Chart類中附加一個值:

接下來計算絕對時間:

注意(坑):beat的值是根據(jù)bpm持續(xù)變化的。也就是說,最原先的BPM值并不是整個譜面文件所使用的beat值,每當(dāng)bpm變化時,beat的值都將重新計算。變化后的beat值直接順延前期的beat值

直接說終究是不好理解,還是看圖吧:

圖片比較大,盡量使用查看原圖

鑒于此,我們需要先聲明4個臨時變量:

因為我們要重新為每個音符都計算絕對時間,所以使用for循環(huán)進行遍歷

因為beatdori中第1個音符類型必定是BPM,且其beat為0,為最先的音符,所以第一個音符的絕對時間必定為0。

當(dāng)后期遇到BPM類型的音符時,再重新計算BPM的值

3.2.3 獲取總Combo數(shù)

最終判斷玩家是否為全連擊時,需要用到總Combo數(shù)。本質(zhì)就是循環(huán)走一遍譜面文件,當(dāng)然也可以與上面的代碼重合寫在一起

這是很早的代碼了,一致沒有修改,大伙能看懂大概意思即可


至此,才算完整讀取譜面文件

感謝你能看到最后,如果有用就請點個贊吧

教程:在Unity中讀取Bestdori自制譜社區(qū)譜面代碼的評論 (共 條)

分享到微博請遵守國家法律
繁峙县| 许昌市| 红安县| 昭通市| 神木县| 建阳市| 余江县| 雅安市| 阿瓦提县| 福安市| 溧阳市| 调兵山市| 科技| 江永县| 衢州市| 正蓝旗| 凉山| 云梦县| 新民市| 舞钢市| 西林县| 芦溪县| 小金县| 融水| 成武县| 龙海市| 合阳县| 青州市| 东阳市| 望奎县| 黑龙江省| 辉县市| 宁国市| 安图县| 阿巴嘎旗| 青神县| 英山县| 沈阳市| 会东县| 栾川县| 长海县|