? ? ? ?音樂音效對于游戲來說是必不可少的一環(huán)挑围,大部分游戲都有音樂音效開關(guān)贸街,5.0之前继准,大部分游戲開發(fā)者都是用代碼控制音樂與音效的開關(guān)搜立。5.0之后unity加入了AudioMixer混音器系統(tǒng),使得做法更加簡單刮吧。?
? ? ? ? AudioMixer功能很多也很強大湖饱,我們在這里只用它一部分的功能,控制整個游戲的音樂音效的開關(guān)以及大小杀捻,同時對音樂文件進(jìn)行優(yōu)化井厌,減少包體大小。
? ? ? ? 首先我們來看一下unity支持的音樂文件水醋,一般背景音樂建議使用.mp3與.ogg旗笔,而音效則可以使用.aiff,一般我會使用一些工具來壓縮截取和改變音樂格式來供游戲使用拄踪,兩個輕量級的工具M(jìn)AC:Sound Studio,PC:gold wave蝇恶。
? ? ? ? AudioMixer意為混音器,我們將其作為開關(guān)的原理就是將所有音樂放入同一音軌惶桐,需要關(guān)閉只需要對這個音軌進(jìn)行操作就行撮弧。
一.首先右鍵Assets創(chuàng)建AudioMixer對象。
? ? ? ?可以這么簡單的理解姚糊,一個AudioMixer就是一個音樂開關(guān)贿衍,游戲內(nèi),我使用了兩個AudioMixer救恨,一個用作管理背景音樂贸辈,一個用作管理音效。創(chuàng)建好的AudioMixer如下圖肠槽。
二.掛載AudioMixer擎淤。
? ? ? ?游戲內(nèi)創(chuàng)建AudioSource后,將其Output掛載上剛剛我們創(chuàng)建好的AudioMixer秸仙。當(dāng)前AudioSource受AudioMixer影響嘴拢。
三.AudioMixer提供外部參數(shù)
? ? ? ?如圖,在AudioMixer設(shè)置界面寂纪,點擊Exposed Parameters 輸入?yún)?shù)席吴,以便腳本控制當(dāng)前音軌。
四.代碼控制開關(guān)
? ? ?首先腳本中獲取到所需要更改的AudioMixer, ?調(diào)用剛剛設(shè)置好的外部參數(shù)捞蛋,腳本如下:
AudioMixer.SetFloat("VolumeMaster",0.0f);//聲音開
AudioMixer.SetFloat("VolumeMaster",-100.0f);//聲音關(guān)
其實可以看出孝冒,其實我們聲音開關(guān)只是將這條音軌的音量降低。
五.優(yōu)化音樂文件大小
取消勾選preload audio data選項拟杉,勾選安卓環(huán)境下的override for andriod選項迈倍,并設(shè)置load type為streaming。
* 這里禁用的預(yù)加載音頻preload audio data捣域,減少加載時間啼染。設(shè)置load type為streaming,音頻剪輯將放入緩沖區(qū)焕梅,從緩沖區(qū)中播放迹鹅,播放完成后,被卸載贞言,釋放內(nèi)存斜棚。
也可以將使用頻繁的音頻設(shè)置load type為decompress on load,在加載時解壓该窗,這樣會更流暢一些弟蚀,當(dāng)然只是用于頻繁使用的音頻即可。
之前項目音樂文件沒優(yōu)化酗失,光音樂內(nèi)存就占了50M义钉,優(yōu)化后小了幾十倍- -