在游戲開發(fā)中的音頻解決方案狼速,CriWare 是不錯的選擇挠锥,很多游戲大作也在使用朴肺。為什么使用CriWare呢缩筛?對于游戲運行時驹闰,可以顯著提高加載速度和減小包體大小场刑。而對于音頻制作上录豺,可以很方便地做更多的效果瞳浦,例如多音源的避讓等喷舀。
今天我們就來淺淺地聊一下在 Unity3D 中使用 CriWare 播放聲音砍濒,以及聲音的管理等問題。
音頻文件由做音頻的同學使用CriWare的軟件去制作硫麻,最終導出的文件是以acb或awb為擴展名的文件爸邢。如果采用的是Memory的形式,則導出的acb文件拿愧。
對于開發(fā)來說杠河,首先要知道兩個東西,一個是CueSheet浇辜,一個是CueName券敌。在音頻制作的時候,多個音頻可以打成一個組柳洋,每一個音頻的名字待诅,就是CueName,而這個組熊镣,就是CueSheet卑雁。我們要播放一個聲音,首先要知道聲音的名字绪囱,就是CueName测蹲,還要知道它所在的組,因為要加載到內(nèi)存中鬼吵。即使要播放組中的一個音頻扣甲,也是要把整個組加載到內(nèi)存中的。
所以在制作時齿椅,音頻那邊的同學要規(guī)劃好文捶,哪些音頻要在同一個組,哪些音頻要在另外的組媒咳。當然粹排,可以一個音頻一個組,但是打成組可以做很多事情涩澡,這個等我請教一個音頻那邊的同學再補充顽耳。
先將聲音播放出來
首先把CriWare插件導入到Unity中
將做好的聲音ACB文件放入StreamingAssets目錄中
-
新建一個空物體,然后掛載CriAtom組件如下圖
CriAtom 用于管理CueSheet,只有將CueSheet加入到CriAtom中射富,才能播放其中的某一個音頻膝迎。將CueSheet加入到CriAtom中,意味著這個CueSheet會被加載到內(nèi)存中胰耗,移除CueSheet限次,則會從內(nèi)存中卸載。
上圖中每點擊 Add CueSheet柴灯,就可以填入一個新的CueSheet卖漫,Name字段就是ACB文件的名字(不帶擴展名),ACB File字段填寫ACB文件名字(帶擴展名)赠群。例如上圖中我已經(jīng)填了一個示例羊始。
新建一個空物體,然后掛載 CriAtomSource 組件查描。這個組件突委,可以理解為Unity的AudioSource,就是用來播聲音的冬三。
上圖中匀油,CueSheet字段,填寫要播放的音源勾笆,所在的CueSheet名(不帶擴展名)钧唐,而CueName,就填寫要播放的聲音的名字匠襟。這些名字钝侠,都是做音頻的同學定好的。勾選上 Play On Start酸舍,然后運行Unity帅韧,就可以聽到聲音。
上面只是實現(xiàn)了聲音能夠播出來啃勉,要在真正的項目中使用忽舟,還需要管理聲音,下面將說一下大概的思路淮阐。
聲音管理器
基本思路是這樣的叮阅,首先有一個聲音管理器我們稱為AudioManager,提供接口播放聲音泣特,停止聲音浩姥,暫停聲音,恢復聲音状您,播放完畢勒叠,CueSheet加載卸載兜挨。外面模塊調(diào)用AudioManager去控制聲音。
調(diào)用 AudioManager 播放聲音的接口時眯分,會生成一個新的對象, GameObject拌汇,掛載一個腳本,我們稱為 AudioPlayer弊决,這個 AudioPlayer 中會動態(tài)的掛載 CriAudioSource噪舀,然后將我們要播放的CueSheet,CueName這些值通過AudioManager傳進去飘诗,設置 CriAudioSource 參數(shù)与倡,然后調(diào)用 CriAudioSource的 Play 函數(shù)。
當調(diào)用 AudioManager 的播放聲音接口時疚察,AudioManager 會動態(tài)記錄這個 CueSheet 是否已經(jīng)添加到 CriAtom 中,如果沒有仇奶,則會添加貌嫡,這時,CriAtom會去加載聲音文件到內(nèi)存中该溯。
AudioManager 在聲音播放完岛抄,或者 GameObject 被銷毀時,需要調(diào)用 AudioManager 的播放完畢接口狈茉,用于計數(shù)夫椭。這個計數(shù),是為了讓 AudioManager 知道一個CueSheet中氯庆,是否還有聲音在播放蹭秋,如果沒有了,則要動態(tài)將 CueSheet 從 CriAtom 中移除掉堤撵,釋放內(nèi)存仁讨。
具體代碼我還沒寫,請等待我有時間再補充~实昨。
一般不會有時間了...哈哈哈哈哈哈...