如何開發音遊所用的節奏點編輯器

開發音遊編輯器


寫在前面
結合之前做的一個音遊Demo,談談自己的感受;
一開始,對音遊並不是很熟悉,只是輕度玩過幾款音遊,再加上對樂理知識的欠缺,導致一開始面對這種需求的時候是比較懵逼的。

後來下載了幾款音遊,觀察了一下大部分音遊對節奏點的處理,然後補充的看了一些樂理知識,慢慢明白了怎麼來用數據量化一首歌曲。
要做一個東西首先得把它量化。

那麼要完成一首音遊那就是:
節奏點數據+運動算法(恆定速度運動,在節奏點的時候正好到達判定線)
當然可以不恆定速度運動(提前做一個位置偏移,改一下速度,看起來就相對地圖在做運動,然後在這個節奏點時刻上它也正好運動到我們給定的位置)

節奏點數據:
歌曲的譜子前面都會寫几几拍,比如4/4拍,前面表示拍數,後面表示四分音符,其實他們之間並沒有什麼聯繫,這裏我的理解就是這首歌一小節是4拍,一拍的長度是一個四分音符的長度,這裏我們只管拍數,然後就是一首歌會有BPM(沒分鐘節拍數),還有這首歌的長度,都是我們需要的信息

然後我發現一些節奏比較快的音樂可能一個小節的拍數會比較多,可能有8拍:比如我經常聽的trap音樂裏面的很多beat的hit-hat都是用8拍把一個小節佔滿:
圖:
在這裏插入圖片描述
然後這是這首歌的BPM:
在這裏插入圖片描述
比如用Beat製作軟件隨便做一節:
在這裏插入圖片描述
紅色的地方一般都會是重音,也一般會是我們的節奏點,看樣子在製作工程中,鼓點的節奏還是對齊的(是在一拍開始得地方),所以利用時刻來量化是沒什麼大的問題的。

然後在第一拍或者第三拍上會有808鼓的重鼓,然後發現樂理書上面講的一般16分音符的音樂就非常少了(一拍的長度是一個16分音符)。
所以取捨了一下,我把一個小節分成了32個時間點,這樣就算你是32拍的樂譜那也是夠用了(主要是爲了在配置音遊譜面的時候能夠更加細化的調節)

那我們的一個小節的時間是多長呢?
首先的算出一拍的多長:
假如我們這首歌是4/4拍的歌曲(很常見),一小節就是4拍

  • 1拍的時間 = 60/BPM(一分鐘60秒);
  • 1 Bar(小節)的時間 = 1拍 * 4(上面的前提,是4/4拍樂譜,所以一小節是4拍);

那麼其實我們之前給一拍分得32份的時間也算出來了:

DeltaTime = BarTime/32;

一首歌有多少拍:

bar = Convert.ToInt32(len / BarTime);

當然,有些音樂的前奏很長,或者是我們不想再前奏放置節奏點,所以會提供一個偏移值:

CurrentTime = OffsetTime;

這樣一來其實就描述完畢了,哦,還有一個分軌問題,經常看到的音遊會有4軌左右:

List1 = new KeyNode[bar * 32];
List2 = new KeyNode[bar * 32];
List3 = new KeyNode[bar * 32];
List4 = new KeyNode[bar * 32];

現在就是給每條軌道初始化每個節奏點的時刻了:

for (int i = 0; i < bar*32; i++)
{
    List1[i] = new KeyNode();
    List2[i] = new KeyNode();
    List3[i] = new KeyNode();
    List4[i] = new KeyNode();
    List1[i].StartTime = TimeCounter;
    List2[i].StartTime = TimeCounter;
    List3[i].StartTime = TimeCounter;
    List4[i].StartTime = TimeCounter;
    List1[i].EndTime = TimeCounter;
    List2[i].EndTime = TimeCounter;
    List3[i].EndTime = TimeCounter;
    List4[i].EndTime = TimeCounter;
    TimeCounter  += DeltaTime;
}

EndTime 是因爲有些節奏點是長按

預覽問題
在配置節奏點的時候需要做一個邊播放邊預覽,這裏利用Unity的編輯器擴展了一下:
在這裏插入圖片描述
當然這裏完全可以不用Unity編輯器,隨便一個界面開發就可以實現,而且可以不用這種8格爲一拍的界面,完全是可以拖拽式的界面,在哪個點需要節奏就直接往上面拖一個需要的怪物類型的點就可以了。
上面的截圖功能說明:
基本信息填寫功能;

  • 有一個播放條,可以前後拖動,從歌曲哪一刻開始播放;
  • 下面的紅線就是當前時刻的節奏點在哪裏;
  • 導出數據和導入數據,保存節奏點數據序列化;
  • 預覽功能,可以在Unity裏面實時預覽目前已經填寫的節奏點,可以利用滑動播放條來回反覆聽這個節奏是不是對的,調試手感;
    在這裏插入圖片描述

紅線爲判斷線,白球是已經填寫的節奏點

利用一些音頻軟件,比如cool editor 可以看到歌曲的頻譜,高低頻都可以看到,將它的第幾節與我們的編輯器對應起來填寫
在這裏插入圖片描述
到這裏就差不多完成了基礎功能了,在遊戲裏將我們保存的數據讀取後在生成怪物點就可以了,這樣就可以快速生成音遊的一關,YES。
以上內容如有錯誤還請指正!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章