淺談在Unity3D中使用CriWare播放聲音

在游戲開發(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)

  1. 首先把CriWare插件導(dǎo)入到Unity中

  2. 將做好的聲音ACB文件放入StreamingAssets目錄中

  3. 新建一個(gè)空物體,然后掛載CriAtom組件如下圖


    image

    CriAtom 用于管理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è)示例。

  4. 新建一個(gè)空物體,然后掛載 CriAtomSource 組件。這個(gè)組件,可以理解為Unity的AudioSource,就是用來(lái)播聲音的。

image

上圖中,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í)間了...哈哈哈哈哈哈...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容