Unity Audio -- (3)創(chuàng)建3D音效
? ? ? ? 本節(jié)會添加場景中小瀑布的音效。小瀑布的音效會有一個作用范圍,也會根據(jù)角色所處的位置不同,產(chǎn)生不同的效果。
添加小瀑布的聲音
? ? ? ? 1. 在Hierarchy中,點擊右鍵,選擇Audio -> Create Audio Source,將這個新的Audio Source名字設(shè)為“Waterfall Audio”。
? ? ? ? 2. 在場景試圖中,移動Audio Source到小瀑布的底部,在池子和瀑布接觸的位置。
? ? ? ? 3. 找到AmbientWater音頻片段(Assets > CreativeCore_Audio > Audio目錄下),將它添加到Audio Source的Audio Clip變量中(推動或者點擊瀏覽按鈕選擇)。
? ? ? ? ? ? 場景中的小瀑布的音效,只要場景是激活狀態(tài),就應(yīng)該一直保持播放狀態(tài)。
? ? ? ? 4. 我們將Audio Source組件的Loop勾選上,讓音頻無限循環(huán)播放。

? ? ? ? ? ? ? ? 我們會聽到瀑布的聲音會一直持續(xù),但它的音量并不會隨著player和瀑布的距離變化而變化。這是因為Audio Source當(dāng)前被設(shè)置為了2D。一般來說,場景中類似瀑布的聲音源是存在于3D空間中的,因此Audio Source需要進一步調(diào)整。
? ? ? ? 6. 退出Play模式。
? ? ? ? 7. 設(shè)置Audio Source的Spatial Blend屬性為3D。
? ? ? ? ? ? ? ? 當(dāng)這個屬性設(shè)置為3D后,audio source的體積的最小和最大距離(場景視圖中Audio Source的兩個球體)就會起作用了。

? ? ? ? 9. 示例中的maximum distance大概設(shè)置為了10。

調(diào)整聲音的擴散角度
? ? ? ? 在進入下一項瀑布Audio Source的調(diào)整前,我們先來做個小實驗:
? ? ? ? 1. 進入Play模式。
? ? ? ? 2. 移動到Audio Source的Max Distance的外邊界,然后將角色轉(zhuǎn)到左邊和右邊,注意聲音有什么變化。
? ? ? ? ? ? ? ? 當(dāng)角色轉(zhuǎn)向左邊時,聲音似乎平移到了右邊的揚聲器中(可以理解為角色右邊耳朵更靠近音源),左邊揚聲器的聲音顯著降低或者完全消失。當(dāng)角色轉(zhuǎn)向右邊時,聲音在左邊更加明顯。我們最好使用耳機來感受這個實驗的效果。
? ? ? ? ? ? ? ? 我們聽到的聲音差異,是由3D聲音設(shè)置里的Spread值所控制的。默認(rèn)情況下,這個值是0,意味著揚聲器所發(fā)出的聲音是完全基于音源的位置信息的。從技術(shù)角度看這種行為是能講通的,但實際效果卻會顯得很不和諧,因為聲音就像是從一個揚聲器跳到了另一個揚聲器去了。
? ? ? ? 3. 仍然在Play模式下,將Spread設(shè)置為180。

? ? ? ? 4. 調(diào)整Spread值,直到我們找到一個聽起來沒問題的值,記住這個值。
? ? ? ? ? ? ? ? 當(dāng)發(fā)生轉(zhuǎn)向時,從左到右的聲音轉(zhuǎn)換應(yīng)該是和諧的,但會有點細(xì)微差異。我們以現(xiàn)實生活中的感知為例。當(dāng)我們一只耳朵更靠近音源時,肯定是更靠近音源的耳朵聲音更明顯,但另一只耳朵也并不是說就完全聽不到或者聲音變得非常小了。
? ? ? ? 5. 退出Play模式,將第4步記錄的值設(shè)置到Spread屬性中。
? ? ? ? ? ? ? ? Spread值一般設(shè)置到0-180之間,我們就能找到一個比較合適的值。但Spread值最大能到360。180-360之間的值實際作用和0-180是一樣的,但超過180后,聲音的通道會反轉(zhuǎn)。在某些情況下這種特性可能會起到特殊作用,但本場景中只要0-180之間的一個值即可。
探索對數(shù)滾降(Logarithmic Rolloff)
? ? ? ? 目前聲音在左右揚聲器之間的轉(zhuǎn)換已經(jīng)比較平滑了,但我們?nèi)匀粫⒁獾揭粋€問題。即便我們已經(jīng)在Max Distance距離之外,瀑布的聲音仍然是可以聽到的。Max Distance就好像是代表了聲音的最小音量,這是怎么回事呢?
? ? ? ? 造成這個問題的原因是音源的音量滾降( Audio Source’s Volume Rolloff)類型被設(shè)置為了對數(shù)滾降(Logarithmic Rolloff)。對數(shù)滾降的方式是真實世界總我們所感知聲音的近似,由于我們對場景進行了一些修改,這種方式的效果可能不是那么明顯。
? ? ? ? 1. 為了更好地理解對數(shù)滾降是如何工作的,我們將Max Distance設(shè)置回500。



? ? ? ? 對數(shù)滾降方式中的Max Distance的理解,有一點很重要。這個距離并不是說聲音聽不到的距離,而是聲音停止衰減的距離。聲音在超出這個距離之外的一段距離內(nèi)仍然會繼續(xù)按照結(jié)束的衰減率進行處理,但隨著距離增大,聲音最終會聽不到。
? ? ? ? 3. 我們點擊運行進入游戲,控制玩家慢慢遠(yuǎn)離瀑布,注意聽在什么地方瀑布的聲音無法再被聽到。
? ? ? ? 由于對數(shù)滾降方式的這些特性,它對于要從很遠(yuǎn)距離就能聽到的聲音的場景來說是不錯的選擇。但對于音源會在極短距離內(nèi)快速衰減的情況來說,又該怎么辦呢?
探索線性滾降(Linear Rolloff)
? ? ? ? 1. 將Volume Rolloff選項從Logarithmic改成Linear,注意曲線的變化:

? ? ? ? 2. 運行場景,感受一下線性滾降和對數(shù)滾降的區(qū)別。
? ? ? ? 當(dāng)角色在Max Distance范圍外時,瀑布的聲音完全聽不到。但只要進入Max Distance范圍內(nèi),聲音會突然播放,聲音就像是憑空出現(xiàn)而不是逐漸放大。當(dāng)角色逐漸靠近音源時,聲音會平滑增長,這樣似乎還不錯,但這并非是聲音在真實世界中該有的現(xiàn)象。
? ? ? ? 線性滾降方式最佳的使用方式是用于吸引玩家注意某些物體,而不是用于環(huán)境音源。音量線性增加會讓玩家更容易判斷音源和玩家的距離,可以讓玩家知道他們的移動方向是否正確。舉一個神秘海域的例子大家應(yīng)該就明白了?!渡衩睾S?失落遺產(chǎn)》中,有一個道具是“女王的紅寶石”,這個道具能夠在接近寶藏的時候發(fā)出聲響。玩家越接近寶藏,聲音就越急促,玩家離開一定范圍,聲音就消失了(實際上頑皮狗是否是使用了線性滾降方式不得而知,但這個例子能比較好的理解線性滾降的場景)。
創(chuàng)建自定義的滾降曲線
? ? ? ? Unity也允許我們自定義滾降曲線。下面我們來看看這個功能。
? ? ? ? 1. 將Volume Rolloff修改成Custom,觀察一下曲線:

? ? ? ? ? ? 這條曲線相比于線性曲線,已經(jīng)更加自然了。我們還可以進一步編輯曲線。
? ? ? ? 3. 選擇紅色曲線。
? ? ? ? 4. 選擇1.0標(biāo)記處的點,這會激活曲線的切線編輯:


? ? ? ? 接下來嘗試去改改新增點的切線。新增的點有左右兩條切線可以編輯。默認(rèn)情況下它們會一起移動,我們可以在右鍵菜單中選擇Broken來單獨編輯左右兩條切線。
? ? ? ? 6. 嘗試為瀑布編輯出一條最佳效果的曲線。然后運行場景,如果不滿意再次嘗試去編輯一下。
調(diào)整Audio Listener
? ? ? ? 我們還可能注意到了一個問題,當(dāng)角色進入到音源的范圍內(nèi)時,聲音會延遲一段距離后才播放。這是因為目前場景中的Audio Listener是掛在相機上的,相機和角色是存在一定距離的。

? ? ? ? 1. 在Hierarchy中選擇Main Camera,在Inspector中找到Audio Listener。
? ? ? ? 2. 點擊Audio Listener組件右上角的三個圓點,選擇Remove Componet移除該組件(也可以通過將左上角的勾去掉禁用這個組件)。
? ? ? ? 3. 在Hierarchy中選擇PlayerArmature游戲物體,在Inspetor中為其添加Audio Listener組件。
? ? ? ? 4. 運行場景再體驗一下有何不同。