无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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ū)譜面代碼的評論 (共 條)

分享到微博請遵守國家法律
柳州市| 腾冲县| 秀山| 汾阳市| 马山县| 临海市| 来宾市| 阜平县| 濉溪县| 荥阳市| 波密县| 安庆市| 万全县| 黄冈市| 黎川县| 平邑县| 岫岩| 永兴县| 泰安市| 金寨县| 汕尾市| 成都市| 栖霞市| 镇坪县| 井陉县| 龙川县| 隆昌县| 依兰县| 梧州市| 通江县| 法库县| 衡东县| 库尔勒市| 石狮市| 伊吾县| 平阳县| 洪江市| 兴安县| 清丰县| 眉山市| 富川|