原文:Unreal Engine 4 Audio Tutorial
做者:Tommy Tran
譯者:Shuchang Liuhtml
在本篇教程中,你將學習如何以不一樣方法播放3D音效,並經過UI控制音頻音量。web
在視頻遊戲中,遊戲音頻一般指的是音樂,對白和音效。在當前的遊戲時代,若是你的遊戲項目裏沒有音頻,基本就是未經打磨的半成品。app
音頻能夠增長遊戲沉浸感。音樂能激起玩家的情緒反應,對白刻畫了角色,推動了故事發展,音效提供了反饋和可信度。這些元素促使一款好遊戲變成一款優秀的遊戲。dom
在本篇教程,你將學習:編輯器
請注意,本篇教程涉及藍圖部份內容。若是你須要複習有關內容,請查看藍圖教程。ide
此外推薦你帶上耳機學習實踐本篇教程內容,由於其中涉及立體音頻的內容。svg
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:函數
下載示例項目並解壓。進入項目文件夾,雙擊SkywardMuffin.uproject打開項目。oop
按下Play能夠運行遊戲。遊戲玩法是儘量踩着天空雲朵往上跳躍,同時避免掉落地面,點擊左鍵跳躍地面。學習
很解壓的小遊戲,對吧?爲了強化放鬆解壓的感受,咱們首先要播放一些寧靜的鋼琴曲。
在Content Browser打開Audio文件夾,這裏有本篇教程要用到的全部聲音資源。你能夠經過在鼠標懸浮在圖標上並點擊播放圖標進行試聽。
要實現播放音樂很是簡單,只要將音頻資源拖拽到Viewport就好了。然而,這樣音樂只會播放一遍,咱們必須手動設置音頻資源的循環播放。雙擊打開S_Music。
會彈出一個帶有簡單Details設置的窗口,在Sound Wave部分設置勾選Looping設置。
接着,回到主編輯器將S_Music拖拽至Viewport。
這樣關卡場景就會建立出一個帶有S_Music音源的AmbientSound Actor,這個Actor會在遊戲運行時播放S_Music。
接着,咱們要在蘑菇小人每次移動時播放一個音效,要實現這點,咱們要使用動畫通知(Animation Notify)。
動畫通知能夠在動畫的特定節點觸發指定事件,咱們能夠用它在實現不少功能。好比,建立一個動畫通知來生成粒子特效。
在遊戲中,重玩按鈕會在蘑菇小人掉落地面時彈出來,利用動畫通知,咱們就能夠改成在死亡動畫結束後再彈出按鈕。
在本篇教程中,咱們將利用動畫通知,實現蘑菇小人每次邁步走路時播放音效。
打開Characters\Muffin文件夾雙擊打開SK_Muffin_Walk,能夠打開動畫編輯器。
在Viewport下面的面板,咱們能看到名爲Notifies的區域。亮灰色區域稱之爲通知軌道(Notify Track)。咱們能夠在這裏建立管理通知。
左右腳觸地的時刻分別是第10幀和第22幀,因此咱們要分別在這兩個節點上建立通知。在通知軌道上點擊右鍵,從彈出菜單中選擇Add Notify\Play Sound,建立名爲PlaySound的通知。
接着,咱們須要將通知位置調整到第10幀處。
要想直接將通知移動到第10幀的位置會有點難度,由於咱們不知道它的具體位置。然而,咱們能夠經過在時間軸調整播放進度條的位置來作位置參考。
首先,時間軸處於面板的底部。在暫停動畫播放後,拖拽紅色的播放進度條到Current Frame爲10的位置。
如今,通知軌道上就會有點紅色指示線用於標記當前播放位置。
拖拽PlaySound通知到紅色指示線處。
接着,咱們要讓通知能控制播放腳步聲。
左鍵選中PlaySound,而後再Details面板的Anim Notify設置處,設置Sound爲S_Footstep。
如法炮製設置另外一隻腳的腳步聲。按照以下操做:
如今,只要步行動畫播放到第10幀和第22幀,就會觸發通知播放S_Footstep。
關閉SK_Muffin_Walk回到主編輯器,按下Play運行遊戲,四處走動停下腳步聲吧。
仔細聽聽腳步聲,你能夠會注意到一些細節。雙腿邁步的音效是如出一轍的!若是有辦法讓音效每次播放時都有些變化就行了。
在教程下一部分,咱們將實現當角色碰到雲朵時播放音效。這一次,咱們會使用Sound Cue來動態調整音效。
Sound Cue是一種控制多個音效並進行合成播放的資源,咱們能夠將一個正常的音頻資源製做成Sound Cue。項目的每一個音效資源,也都能單獨包裝製做成Sound Cue類型資源來進行播放。
下面例子是用Concatenator節點將3個音頻資源合成一個Sound Cue來按順序播放:
若是改爲用Random節點,播放Sound Cue的效果就是從3個音頻中隨機一個進行播放。
在本篇教程裏,咱們將建立一個Sound Cue並控制它的音調。
首先,回到Audio文件夾,咱們要將S_Pop包裝製做成Sound Cue,經過右鍵點擊S_Pop,在彈出菜單中選擇Create Cue進行建立。
這樣會建立出名爲S_Pop_Cue的新資源,雙擊S_Pop_Cue打開Sound Cue編輯器。
注意:編輯器外觀跟材質編輯器外觀很是類似,在此再也不贅述。若是你還不熟悉材質編輯器,請查看入門教程。
在圖表中,咱們能夠看到兩個節點:Wave Player:S_Pop和Output。Sound Cue會播聽任何與Output節點相連的音效(在本例裏,它會播放S_Pop)。你能夠經過在Toolbar上點擊Play Cue來試聽。
接着,咱們要試着修改它的音調。
爲了修改聲音的音調,咱們須要用到Modulator節點。建立節點並以下圖進行鏈接:
如今就能夠修改音調了。選中Modulator節點,在Details面板能夠看到兩個相關字段:Pitch Min和Pitch Max。數值若是低於1,說明音調能夠變低,反之亦然。數值爲1說明保持聲音本來的音調。
在本例中,咱們只會調高聲音音調,所以將Pitch Min設爲1.0,Pitch Max設爲2.0。
如今,每次播放Sound Cue時,聲音音調都會隨機在原音調和原音調的兩倍之間。
回到主編輯器,打開Blueprints文件夾。打開BP_Cloud並點進CloudTouched函數裏。該函數在玩家碰到雲朵時就會調用,很適合在此時播放Sound Cue。
有如下兩種節點都適合用來播放聲音:
Play Sound 2D:不考慮衰減和空間定位進行聲音播放(關於這兩個概念等下講解)。該節點適合用於播放不是從遊戲世界中產生的聲音,好比背景音樂和UI音效。
Play Sound at Location:指定3D空間位置做爲音源進行聲音播放。該節點適合用於模擬聲音從某個位置某個方向傳出的效果。
因爲雲朵是遊戲世界裏的具體實體,聲音理所固然要從實體中傳出來才顯得逼真。所以咱們在節點末端添加Play Sound at Location節點。
隨後,將Sound設置爲S_Pop_Cue。
點擊Compile並返回主編輯器,按下Play運行遊戲,每次碰到運動,你應該都能聽到不一樣的音調聲音。
如今聲音有了高低音效之分了,但聽起來沒有什麼立體效果。要實現這點,咱們須要將聲音空間化(spatialize)。
空間定位是一種讓聲音聽起來處於3D空間的處理手段。聲音若是從左邊傳來,那左邊的耳機聲音會更清楚,反之亦然。
除了能加強沉浸感,空間定位還能完善遊戲玩法。像守望先鋒和反恐精英等競技遊戲中,立體聲效可讓玩家敏銳地感知對手的位置。
在本篇教程中,咱們會對某些雲朵音效啓用空間定位。
有如下兩種方法對Sound Cue啓用空間定位:
在本例中,咱們將使用第二種方法。打開S_Pop_Cue,在Details面板的Attenuation設置處勾選Override Attenuation,這樣能夠啓用Attenuation Overrides部分設置。
咱們能夠觀察Attenuation Overrides處的箭頭是否可點判斷空間定位是否啓用。Spatialize設置代表聲音是否會衰減。
如上圖進行設置而後關閉S_Pop_Cue。接着,咱們要指定聲音的3D空間位置。
打開BP_Cloud並建立GetActorLocation節點,隨後將其與Play Sound at Location節點的Location引腳相連。
這樣聲音就會在雲朵的位置播放出來。
點擊Compile並返回主編輯器。按下Play運行遊戲,操控小人觸碰雲朵,你能夠感受到聲音是從不一樣的地方傳來的。
注意:默認狀況下攝像機就是音頻監聽者(audio listener)。這意味着咱們是以攝像機的視角去聽那些聲音的。若是你想修改監聽者對應的Actor,可使用Set Audio Listener Override節點。
你可能注意到了有些雲是會下雨的,若是它沒有對應的下雨聲那就不真實了!接着,咱們要爲其添加雨聲,並啓用衰減(attenuation)來聲音產生遠近變化。
與其使用節點播放雨聲,咱們可使用Audio組件。使用組件的一大優勢就是它能在雲的位置自動播放。
打開BP_Cloud,在Components面板添加Audio組件,將其命名爲RainAudio。
選中組件,在Details面板找到Sound設置,將Sound設爲S_Rain。
普通雲朵不該該播放雨聲,即普通雲朵要禁用RainAudio組件,咱們在Details面板找到Activation設置並取消勾選Auto Activate。
雨雲則要啓用RainAudio組件,咱們能夠在EnableRain函數作這件事,只有雨雲實例纔會執行該函數。打開EnableRain函數並添加以下高亮節點:
接着,咱們須要啓用並設置衰減。
在Components面板選中RainAudio,在Details面板找到Attenuation設置,啓用Override Attenuation。
衰減設置肯定了空間距離與聲音衰減的比例關係。在Attenuation Overrides設置裏,能夠修改如下兩個參數:
Radius(半徑):聲音開始衰減的最遠距離
Falloff Distance(衰減距離):聲音衰減至靜默的距離,這個距離從Radius往外開始算起。
看看以下例子:
當玩家處於內圓半徑時(取決於Radius),音量爲100%。當玩家從內圓走向外圓邊緣時,音量會逐漸衰減至0%。
對於本篇教程,咱們將Radius設爲300,FalloffDistance設爲400。
這表明玩家在距離300單位內,音量是100%的,當玩家距離逐漸接近700(300 + 400)單位時,音量減至0%。
有時當雲朵從屏幕中移除了,但玩家還未離開聲音衰減範圍內的狀況下,聲音會被忽然切斷。爲了解決這個問題,咱們給音效加上漸隱效果。
切換到Event Graph並找到FadeOut事件。咱們能夠經過在My Blueprint面板找到Graphs部分設置,雙擊EventGraph列表下的FadeOut。
在節點末端添加以下高亮節點:
FadeOut節點會在玩家觸碰雲朵時觸發執行,Timeline (FadeTimeline)節點的Alpha字段會在一段時間內輸出從1到0。經過這個數值來控制RainAudio漸隱。
注意:你能夠雙擊Timeline節點打開頁籤查看節點是否能正常工做。想了解更多關於Timelines的內容,請查看官方文檔。
接着咱們還須要幹一件事才能聽到S_Rain。當聲音的音量降到0%時,它會中止播放。因爲在遊戲中,一開始咱們極可能處於聲音的衰減距離外,S_Rain天然就會降至0%。當咱們再次進入衰減距離內時,因爲聲音已中止播放,就不會聽到任何東西了。
咱們能夠經過Virtualize when Silent修正這一點,啓用該設置能夠保證不管音量大小,聲音始終處於播放狀態。
點擊Compile並關閉BP_Cloud,打開Audio文件夾並打開S_Rain,在Sound設置處啓用Virtualize when Silent。
如今,S_Rain即便處於靜音狀態也會始終播放。關閉S_Rain並返回主編輯器,按下Play運行遊戲,控制小人接近雨聲的有效範圍內聽聽效果吧。
在教程最後一部分,咱們將會經過Sound Classes(聲音類)和Sound Mixes(混音)控制聲音音量。
用聲音類能夠簡便地將多個聲音組織起來。好比,你能夠將全部音樂組織成一個聲音類,全部音效組織成另外一個類。
爲了能在遊戲過程當中調整聲音類的參數(音量,音調等),咱們可使用混音。混音本質是一張表格,表格每行的表頭就是聲音類。每行數據都表示該行聲音類的參數調整。
下圖說明了一個混音所包含的數據:
使用了上述的混音,Music聲音類的全部聲音都會以本來音量的一半來播放。Effect的聲音則本來音調的兩倍進行播放。
如今,讓咱們來着手建立聲音類。
在本篇教程,咱們將分別調整聲音和音效的音量。這意味着咱們須要兩個聲音類。在Content Browser裏,點擊Add New並選擇Sounds\Sound Class,將其重命名爲S_Music_Class。
再建立另外一個聲音類命名爲S_Effects_Class。
接着,咱們須要指定每一個聲音的聲音類。首先對音樂資源進行設置。打開S_Music,在Sound設置處將Sound Class修改成S_Music_Class。
作好以上設置後,就關閉S_Music。
接着要設置音效資源。與其一個個指定聲音類,咱們全選如下資源:
隨後,右鍵點擊選中資源,選中Asset Actions\Bulk Edit via Property Matrix,這樣就能打開屬性矩陣編輯器並看到以上資源。
經過編輯器咱們能夠同時編輯選中資源的通用屬性。
在Details面板展開Sound分支,點擊Sound Class右側的網格圖標。
選擇S_Effects_Class,而後關閉屬性矩陣編輯器。
就此全部的音頻都設置好聲音類了,接着,咱們要建立混音,並經過藍圖來控制調整它。
在Content Browser裏,點擊Add New並選中Sounds\Sound Mix,將新建混音命名爲S_Volume_Mix。
咱們能夠經過滑條控制每一個聲音類的音量,項目裏已經提早建立好了滑條資源,找到UI文件夾並打開WBP_Options。
爲了實現音量調節,咱們須要獲取滑條數值並傳給混音。咱們首先實現音樂音量控制。
將編輯器切換成Graph模式,並在My Blueprints面板找到Variables設置,選中MusicSlider,而後在Details面板點擊On Value Changed旁邊的按鈕。
這樣圖表就會建立一個On Value Changed (MusicSlider)事件,每次滑動滑條時,事件都會觸發執行。
如今,咱們須要設置S_Volume_Mix裏的S_Music_Class聲音類的音量。這裏要利用Set Sound Mix Class Override節點,該節點容許咱們指定一個混音和一個聲音類。若是混音裏不存在指定聲音類,它會自動將其添加進去。若是已存在,則更新對應的聲音類。
添加Set Sound Mix Class Override節點,並作以下設置:
接着,以下鏈接節點:
如法炮製設置EffectsSlider,將In Sound Class引腳修改成S_Effects_Class。
如今,只要滑條數值發生變更,S_Volume_Mix就會修改相關聲音類的音量。
最後咱們還要激活對應混音,才能讓這一切運做起來。
對本例而言(用UI控制音量),最好是在遊戲一開始激活混音。這樣聲音類一開始就能用上混音設置。然而,簡單起見,本例中咱們仍是在控件中激活混音。
建立Event Pre Construct節點,這個節點跟藍圖的Event BeginPlay節點很是類似。
爲了激活混音,咱們要使用Push Sound Mix Modifier節點,建立對應節點並與Event Pre Construct相連,隨後設置In Sound Mix Modifier爲S_Volume_Mix。
這樣在WBP_Options生成時就能激活S_Volume_Mix。
點擊Compile並關閉WBP_Options。按下Play運行遊戲,點擊M鍵彈出滑條,調整滑條感覺音量的變化吧。
你能夠在這裏下載完整項目。
如你所見,在Unreal Engine 4裏使用音頻很是簡單。若是你想了解更多關於音頻系統的內容,點擊查閱官方文檔。你還能夠實現像混響或EQ這樣炫酷的效果,記得也關注下即將推出的全新音頻引擎。
若是你還想繼續學習引擎其餘內容,點擊下篇教程,將講解有關粒子特效的內容。