遊戲設計 Audio
Audio Audio三項基本元件: Audio Clip Audio Listener Audio Source
Audio Clip 代表一段音訊。 可匯入.aif .wav .mp3 .ogg等音訊檔案。 可調整的選項包括壓縮格式、品質、讀取形 式等,和遊戲效能有關連。 需考慮遊戲架構、音訊被播放的時機、音訊 的長度等等,才能選出最適合的參數。 維持預設即可,不會影響遊戲內容表現。
Audio Listener 接收來自場景中Audio Source發出的音效, 輸出到喇叭。 大部分情況下,Audio Listener會附加在 Main Camera上,模擬從玩家視角聽到的音 效。 會根據Audio Source的設定,綜合兩者距離 差計算聽到的音量。如果有兩者之間有速度 差,也會產生都普勒效應。
Audio Source 代表一個聲音的來源,播放一段Audio Clip。 可設定音量、音高、2D/3D、與其他效 果的混合比重等。 靜音 開始就播放 循環播放 最大可被聽見的範圍 代表一個聲音的來源,播放一段Audio Clip。 可設定音量、音高、2D/3D、與其他效 果的混合比重等。
Audio Source GameObect裡可以調整音量與距離的關係。 (如右圖的曲線,與物體距離為0時音量最大 ,500公尺時音量為0) 可以利用調整曲線去控制音量的一致。 調整成水平線音量就會均等 可以拖曳這個點去調整曲線
Audio Source AudioSource.volume: 0~1的浮點數,表示音量。 AudioSource.pitch: 音高,-3~3的浮點數,加速/減速音訊播放速度。 AudioSource.spatialBlend: AudioSource與AudioListener的距離如何影響音量。 0表示完全不影響,即2D音效,如背景音樂。 1表示完全受到距離影響,即3D音效,如場景中NPC的腳步聲。
範例:AudioSource.unity 嘗試各種不同的AudioSource效果。
AudioSource 有時候,某些事件發生後會需要播放一段短暫的音效。 UI按鈕音效。 爆炸聲。 角色被攻擊的慘叫。 AudioSource.playOneShot: 適合參數一樣的音效,如UI音效,或主角發出的所有聲音。 AudioSource.playClipAtPoint: 適合即時產生在場景某處的3D音效,如爆炸聲。
AudioSource.PlayOneShot 需要一個AudioSource Component。 使用該Audio Source,播放一段Audio Clip。 不會更改該Audio Source目前的clip。 Audio Source任何的參數變化/狀態變化都會 影響播放中的OneShot。 可以同時呼叫PlayOneShot多次,彼此之間不 互相影響。 播放以後沒辦法獨立暫停/取消。
AudioSource.PlayClipAtPoint AudioSource class的靜態成員函式,不需要AudioSource實體。 在世界座標指定的位址播放一段Audio Clip。必定為3D Sound。 場景中會產生一個One shot audio物件,播放完會自我刪除。
Audio Effects 音效元件本身不發出聲音,但可以影響Audio Source發出的聲音 或Audio Listener聽到的聲音。 音效元件: Audio Mixer + Audio Effect Audio Filter Reverb Zone
Audio Mixer + Audio Effect 控制Audio Source混合的順序,每一次混和都 可以加入不同的Audio Effect。 請參閱文件: http://docs.unity3d.com/Manual/AudioMixer.html
Audio Filter 直接對物件發出/聽到的音效做出filter效果。 對Audio Source使用: 影響發出的聲音。 對Audio Listener使用: 影響聽到的所有聲音。 Component的順序會影響filter套用的順序。 對Audio Listener聽到的所有聲音,先做low pass(過濾掉頻率高於5000hz的聲音),再做chorus(合唱) filter。
Reverb Zone Reverb,殘響,用來模擬聲音在具有障礙物 的環境中的反射/折射/繞射綜合產生的複雜 效果。 使用時機如:玩家走進山洞中時,腳步聲會 產生回音。此時只要將山洞整個包在Reverb Zone中,所有位於其中的Audio Source和 Audio Listener都會自動受到影響。 有各項環境參數可調整,與一般電腦中的混 音軟體相似。 內建的 混音效果
範例:ReverbZone.unity 當角色進入Reverb Zone時,腳步聲會變化,模擬洞穴的回音。
Microphone Class 從可用的聲音輸入裝置(麥克風、網路攝影機)錄製音效為一段 AudioClip。 在Android上需要RECORD_AUDIO權限。 沒有UI/Component可使用,只能直接寫C#腳本。 注意:呼叫Microphone.Start()會產生AudioClip的meta資料, 此時讀不到任何聲音資料,實際資料在呼叫Microphone.End()之 後才會寫入!
Microphone Class 開始錄音: Microphone.Start (麥克風名稱,循環錄音,錄音時間(秒),取樣頻率); 當錄音時間超過設定的錄音時間時,會從最開始處覆蓋掉 開始錄音: Microphone.Start (麥克風名稱,循環錄音,錄音時間(秒),取樣頻率); 結束錄音: Microphone.End (麥克風名稱); 播放錄音: AudioSource.Play(); ex. AudioSource source; //AudioSource元件 source.clip = Microphone.Start ("", false, 5, 44100); //開始錄音 Microphone.End (""); //結束錄音 source.Play(); //播放
範例:RealTimeMicrophone.unity 即時偵測音量大小。
範例:AudioRecord.unity 錄製一段音效之後播出。