在游戲開發(fā)中的音頻解決方案,CriWare 是不錯(cuò)的選擇,很多游戲大作也在使用。為什么使用CriWare呢?對(duì)于游戲運(yùn)行時(shí),可以顯著提高加載速度和減小包體大小。而對(duì)于音頻制作上,可以很方便地做更多的效果,例如多音源的避讓等。
今天我們就來(lái)淺淺地聊一下在 Unity3D 中使用 CriWare 播放聲音,以及聲音的管理等問(wèn)題。
音頻文件由做音頻的同學(xué)使用CriWare的軟件去制作,最終導(dǎo)出的文件是以acb或awb為擴(kuò)展名的文件。如果采用的是Memory的形式,則導(dǎo)出的acb文件。
對(duì)于開發(fā)來(lái)說(shuō),首先要知道兩個(gè)東西,一個(gè)是CueSheet,一個(gè)是CueName。在音頻制作的時(shí)候,多個(gè)音頻可以打成一個(gè)組,每一個(gè)音頻的名字,就是CueName,而這個(gè)組,就是CueSheet。我們要播放一個(gè)聲音,首先要知道聲音的名字,就是CueName,還要知道它所在的組,因?yàn)橐虞d到內(nèi)存中。即使要播放組中的一個(gè)音頻,也是要把整個(gè)組加載到內(nèi)存中的。
所以在制作時(shí),音頻那邊的同學(xué)要規(guī)劃好,哪些音頻要在同一個(gè)組,哪些音頻要在另外的組。當(dāng)然,可以一個(gè)音頻一個(gè)組,但是打成組可以做很多事情,這個(gè)等我請(qǐng)教一個(gè)音頻那邊的同學(xué)再補(bǔ)充。
先將聲音播放出來(lái)
首先把CriWare插件導(dǎo)入到Unity中
將做好的聲音ACB文件放入StreamingAssets目錄中
-
新建一個(gè)空物體,然后掛載CriAtom組件如下圖
imageCriAtom 用于管理CueSheet,只有將CueSheet加入到CriAtom中,才能播放其中的某一個(gè)音頻。將CueSheet加入到CriAtom中,意味著這個(gè)CueSheet會(huì)被加載到內(nèi)存中,移除CueSheet,則會(huì)從內(nèi)存中卸載。
上圖中每點(diǎn)擊 Add CueSheet,就可以填入一個(gè)新的CueSheet,Name字段就是ACB文件的名字(不帶擴(kuò)展名),ACB File字段填寫ACB文件名字(帶擴(kuò)展名)。例如上圖中我已經(jīng)填了一個(gè)示例。
新建一個(gè)空物體,然后掛載 CriAtomSource 組件。這個(gè)組件,可以理解為Unity的AudioSource,就是用來(lái)播聲音的。

上圖中,CueSheet字段,填寫要播放的音源,所在的CueSheet名(不帶擴(kuò)展名),而CueName,就填寫要播放的聲音的名字。這些名字,都是做音頻的同學(xué)定好的。勾選上 Play On Start,然后運(yùn)行Unity,就可以聽到聲音。
上面只是實(shí)現(xiàn)了聲音能夠播出來(lái),要在真正的項(xiàng)目中使用,還需要管理聲音,下面將說(shuō)一下大概的思路。
聲音管理器
基本思路是這樣的,首先有一個(gè)聲音管理器我們稱為AudioManager,提供接口播放聲音,停止聲音,暫停聲音,恢復(fù)聲音,播放完畢,CueSheet加載卸載。外面模塊調(diào)用AudioManager去控制聲音。
調(diào)用 AudioManager 播放聲音的接口時(shí),會(huì)生成一個(gè)新的對(duì)象, GameObject,掛載一個(gè)腳本,我們稱為 AudioPlayer,這個(gè) AudioPlayer 中會(huì)動(dòng)態(tài)的掛載 CriAudioSource,然后將我們要播放的CueSheet,CueName這些值通過(guò)AudioManager傳進(jìn)去,設(shè)置 CriAudioSource 參數(shù),然后調(diào)用 CriAudioSource的 Play 函數(shù)。
當(dāng)調(diào)用 AudioManager 的播放聲音接口時(shí),AudioManager 會(huì)動(dòng)態(tài)記錄這個(gè) CueSheet 是否已經(jīng)添加到 CriAtom 中,如果沒(méi)有,則會(huì)添加,這時(shí),CriAtom會(huì)去加載聲音文件到內(nèi)存中。
AudioManager 在聲音播放完,或者 GameObject 被銷毀時(shí),需要調(diào)用 AudioManager 的播放完畢接口,用于計(jì)數(shù)。這個(gè)計(jì)數(shù),是為了讓 AudioManager 知道一個(gè)CueSheet中,是否還有聲音在播放,如果沒(méi)有了,則要?jiǎng)討B(tài)將 CueSheet 從 CriAtom 中移除掉,釋放內(nèi)存。
具體代碼我還沒(méi)寫,請(qǐng)等待我有時(shí)間再補(bǔ)充~。
一般不會(huì)有時(shí)間了...哈哈哈哈哈哈...
