3D聲音
3D立體聲和2D聲不同的地方是它是會隨着距離衰減的,距離越近聲音越大,距離越遠聲音越小。
1: 聲音: 背景音樂和音效;
2: 聲音文件支持的格式: ogg, mp3, wave, AIFF;
ogg比較流行,很多安卓里面的聲音使用ogg的格式是為了繞開mp3的版權
ogg和mp3都比較常用
wave和ogg、mp3比起來比較大,沒有壓縮的數字音樂,可以直接寫到聲卡里面
3:音頻管理器: Edit-->ProjectSetting--> Audio;和物理引擎一樣有管理器
Global Volume: 全局播放的音量;
Volume Rolloff Scale: 衰減因子,越大,聲音衰減越快;
Doppler Factor: 多普勒因子;模擬多普勒效應的監聽效果:0關閉, 1 高速物體的多普勒效應會比較明顯的監聽的到;
Default Speak Mode: 設置揚聲器模式;默認值為2(立體聲, AudioSpeakModer); stereo立體聲
System Sample Rate: (輸出采樣率);
DSP Buffer Size: 調整DSP緩沖區大小優化延遲和性能;越大效果越好
Max Virutal/Real Voices Count: 同時播放的真實聲音的數量;虛擬的聲音最后會和其他的聲音混合在一起,所以比真實的聲音多。
Disable Unity Audio: 是否使用音頻;
音頻監聽器
類似於人的耳朵,把耳朵移動到哪里,就可以聽到那里附近的聲音,也可以比喻為話筒。如果場景中沒有音頻監聽器,那么玩家是聽不到聲音的,即使那個物體正在發聲。
1: 音頻監聽器在3D世界中扮演話筒的角色,他接受場景中輸入的音頻源,通過設備的揚聲器來播放聲音;
2: 當一個音頻監聽器掛載到場景中的一個游戲對象上,任何音源如果接近音頻監聽器,都會輸出到計算機的揚聲器中,每個場景中只能有一個音頻監聽器,一般會默認的添加到主攝像機上;這樣攝像機拍到哪里我們就監聽哪里的聲音。
主攝像機初始化的時候也是帶着Audio Listener組件的。
3: AudioClip: 聲音文件,就是聲音的資源文件
AudioSource(聲源)
我們需要對聲音進行衰減,需要計算監聽器與聲源的距離,需要對一些聲源做混合,就要使用AudioSource組件,幫助我們播放AudioClip(音頻文件)
1: 音頻源: 在場景中播放音頻剪輯,如果一個音頻剪輯是一個3D,那么音頻源就會在給定的位置,然后隨着距離進行衰減,還可以在3D和2D之間進行切換;
2: 創建一個音頻源:
(1): 導入要播放的聲音文件;
(2): 創建一個節點,並加上Audio-->Audio Source組件;
(3): 將AudioClip加入到AudioSource中;
(4): 代碼控制播放;
3:屬性:
AudioClip: 要被播放的文件;
Output: 音頻剪輯通過音頻混合器輸出;
Mute: 是否靜音;
Play On Wake喚醒時播放;
loop: 是否循環播放;
Priority: 播放的優先級,0最高,256最低,默認128,優先級高的一般是重要的音效
Volume 音量 Pitch 音調 Stereo Pan立體聲(-1左聲道, 1右聲道)
Spatial Blend(空間混合), 0為2D音效, 1為3D音效,2D音效不會做衰減
Spread: (3D)立體聲在揚聲器空間中的傳播速度;
Volume Rolloff音量衰減模式: 對數(Logarithmic),線性(Linear)和自定義模式(Custom),自定義模式要自己加控制點。
Min Distance/Max Distance衰減的范圍,衰減距離的 開始結束, 最小距離(聲音保持最大量),最大距離(不再衰減)
當我們的音頻監聽器和聲源的距離小於Min Distance的時候,都是最大聲音,大於Max Distance的都是最小聲音或者沒有,這個取決於那個聲音曲線的設置,一般自定義才可以設置超出Max距離后還有聲音。
當我們調節Min Distance/Max Distance的時候,Scene視圖里面的聲源球的范圍也會隨之改變,兩個球體之間的部分就是有衰減的部分。
聲音實例
1.創建Unity工程目錄
2.在resources文件夾下面創建一個sounds文件夾
3.把准備好的聲音素材復制進去
4.點擊音頻資源右下角的播放可以播放,最后一行的數值的話,前面是碼率,后面是聲音的時間
5.創建一個audio的空節點,添加AudioSource組件
6.把准備好的音頻文件audioclip文件拖進audio節點的AudioSource組件的屬性中。
7.使用代碼來控制聲音播放,創建一個腳本audio_test掛載在audio節點下面
8.打開audio_test腳本
第一步:寫一個public AudioSource s;公開屬性,然后把audio節點拖進屬性中,這樣就關聯好了自己的AudioSource組件(其實我覺得可以用getComponent獲得組件,事實證明可以)
第二步:設置聲音
using UnityEngine; using System.Collections; public class audio_test : MonoBehaviour { public AudioSource s; // Use this for initialization void Start () { // 聲音的全局設置 AudioConfiguration audio_config = AudioSettings.GetConfiguration(); //....中間設置內容 AudioSettings.Reset(audio_config);//設置完后再放回去 // end //上面兩句必須寫,不然下面那句執行無效,我也不知道為啥
// this.s.Play();//如果里面加數字不是延遲播放,而是類似快進,碼率為快進1秒,碼率X2位快進2秒 this.s.PlayDelayed(5);//延遲5秒播放 } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) {//鼠標左鍵按下 if (this.s.isPlaying) { this.s.Pause(); } else { this.s.Play(); } } if (Input.GetMouseButtonDown(1)) {//鼠標右鍵按下 this.s.Stop(); } } }
9.鼠標左鍵單擊Game視圖,聲音過5秒播放,再點擊暫停,再點擊繼續播放,鼠標右鍵停止播放。