Unity 集成 FMOD 音頻管理插件 2.02
- 3. 集成教程:
- 3.1 設置Unity項目
- 3.2 設置FMOD項目
- 3.3 設置 FMOD for Unity
- 3.4 添加聲音:卡丁車引擎
- 3.5 添加聲音:氛圍
- 3.6 添加聲音:音樂
- 3.7 刪除現有音頻
- 3.8 下一步
- 10. 腳本 API 參考
- 10.1 基礎知識
- 10.2 Unity Inspector 中的瀏覽器 UI
- 10.2.1 事件
- 10.2.2 BANK
- 10.2.3 全局參數
- 11 FMOD [主頁鏈接](https://www.fmod.com/)
3. 集成教程:
本指南將向您展示如何開始使用 FMOD for Unity。您將采用現有的Unity項目,安裝FMOD for Unity,并集成使用FMOD Studio創建的自適應音頻。一步一步地跟著走,聽聽結果。完成本教程后,您應該有足夠的知識將 FMOD 內容集成到任何 Unity 項目中。
您將使用的 Unity 項目是卡丁車微型游戲模板,這是一款專為學習而開發的 3D 卡丁車賽車游戲。為簡單起見,您將使用 FMOD 示例項目中的音頻內容。觀看下面的視頻,預覽我們將要進行的更改:
前后對比一下我們將對卡丁車小游戲所做的更改。
讓我們開始吧!
3.1 設置Unity項目
1 訪問 Unity 網站并使用“下載 Unity Hub”按鈕安裝 Unity Hub。
2 登錄 Asset Store 并從 Asset Store 將 Karting Microgame 添加到您的資產中。
3 運行 Unity Hub 并重新登錄。
4 在 Unity Hub 中,單擊“新建項目”。
5 單擊“所有模板”,然后滾動到“卡丁車微型游戲”磁貼。
6 單擊下載模板。
7 如果您尚未安裝 Unity 引擎,系統將提示您安裝一個引擎。如果您安裝了兼容的引擎,請跳到步驟 8。
如果您看到以下消息:
a. 單擊安裝編輯器。
b. 在出現的提示符中,選擇受支持的 Unity 版本(在 Karting Microgame 的 Asset Store 頁面中注明),然后單擊安裝。
c. 單擊“安裝”
d. 等待安裝完成,在 Unity Hub 的“安裝”部分。
e. 完成后,再次單擊“新建項目”,然后選擇“卡丁車微型游戲”(如步驟 4 和 5 所示)。
8 輸入項目名稱,然后單擊“創建項目”。
Unity 將打開并導入項目數據。這可能需要一些時間。 在 Windows 上,您可能需要接受任何提示才能允許防火墻訪問。
打開Unity后,您將看到一個歡迎對話框,說明如何開始使用卡丁車微型游戲教程。
9 歡迎對話框可引導您完成 Unity 的 Karting Microgame 教程。由于我們沒有遵循它,我們可以通過單擊窗口右上角的叉號來關閉“歡迎”對話框。
10 在屏幕右側,您會看到“教程”選項卡。同樣,這在 Unity 的教程中使用,因此我們也可以通過單擊菜單下拉列表并從菜單中選擇“關閉選項卡”來關閉它。
讓我們試著玩卡丁車游戲,聽聽目前的情況。
11 單擊 Unity 窗口頂部的播放按鈕。
游戲將在編輯器中開始播放。
12 使用鍵盤上的箭頭鍵開始駕駛。
正如你所聽到的,發動機的聲音非常安靜。我們可以暫時禁用音樂來聽到引擎 - 但在進行任何更改之前,讓我們保存此項目的新副本。
13 從菜單欄中選擇“文件”>“退出”。
14 系統將提示您保留該項目。選擇“保留”。
15 選擇項目的保存位置和名稱。
16 若要重新打開項目,請再次打開 Unity Hub。
17 從“項目”部分中,選擇剛剛保存的項目。(有時 Unity Hub 不會顯示較舊的項目。如果未顯示項目,請單擊“添加”按鈕并導航到之前保存項目的位置。
等待項目在 Unity 中重新打開,然后再次單擊播放按鈕。
18 在游戲運行時,在左側的“層次結構”選項卡中選擇“BackgroundMusic”游戲對象。
19 取消選中右側“檢查器”窗格中的“音頻源”組件。
20 使用方向鍵繼續行駛。
21 聽完引擎后,單擊播放按鈕退出游戲。
引擎的聲音,以及游戲的一般音頻,可能需要一些改進。我們可以使用 FMOD 來做到這一點。
3.2 設置FMOD項目
我們的計劃是使用 FMOD Studio 示例中的音頻內容。為此,我們需要安裝 FMOD Studio 創作工具并創建一個新的 FMOD
Studio 項目。
1 轉到 FMOD。
2 單擊下載。
3 登錄或創建帳戶。
4 在下載頁面上,單擊 FMOD Studio Suite 部分將其展開,然后選擇 2.02 子部分。
5 單擊適合您正在使用的計算機平臺(Windows 或 Mac)的下載鏈接。
FMOD for Unity的“Unity Verified”版本經過 Unity 的 QA 測試和認證,是兼容的解決方案。
6 運行下載的安裝程序并按照安裝說明進行操作。
接下來,讓我們復制 FMOD Studio 附帶的示例項目。
7 通過從 Windows 上的“開始”菜單或 Mac 上的“應用程序”文件夾中選擇它來運行 FMOD Studio。 (在 Windows 上,接受任何允許防火墻訪問的提示。
8 在歡迎對話框中,從“最近使用的項目”列表中選擇 Examples.fspro 項目。(在 Mac 上,如果未顯示 Examples.fspro,請單擊“打開項目”以手動找到它。示例項目位于 FMOD Studio 安裝目錄的 examples 文件夾中。
9 從菜單欄中,選擇“文件”>“另存為…”。
10 選擇項目的保存位置和名稱。當我們告訴Unity在哪里可以找到FMOD項目時,我們可以將項目保存在我們喜歡的任何位置。請勿在之前創建的 Unity 項目的 Assets 文件夾中選擇位置。
示例項目包含許多事件。 在 FMOD中,事件是可以通過游戲代碼控制的聲音內容單元。游戲中發出聲音的所有內容都應該有相應的事件。事件包含音頻文件和播放邏輯。
在我們的游戲中,卡丁車的引擎將有自己的事件。 在本指南中,我們將使用 Kart 引擎示例項目中的現有事件。我們稍后將介紹如何創建新事件。
11 在窗口左側的“事件”瀏覽器中,選擇“車輛>駕駛式割草機”。該事件將顯示在編輯器中。
12 單擊傳輸欄中的播放按鈕以試聽事件。
13 在傳輸欄中拖動 RPM 滑塊。
您應該聽到以各種 RPM 播放的更準確的發動機聲音模型。 我們的 Unity
游戲可以簡單地播放此事件,在游戲過程中發送任何相關參數數據,例如 RPM 值。
14 單擊停止按鈕以停止試鏡活動。
Setting up the FMOD Project
下一步是將我們的 FMOD 活動構建到銀行中。稍后,我們將在 Unity 中加載庫。
15 在菜單欄中,選擇“文件”>“生成…”。
這些庫將構建到 FMOD Studio 項目中的文件夾中。
3.3 設置 FMOD for Unity
現在,我們已準備好將銀行加載到Unity中,以便可以觸發卡丁車事件。首先,我們需要導入 FMOD for Unity。
1 在瀏覽器中導航到 FMOD for Unity。
請注意,在 Unity 2019.4 及更早版本中,資源存儲會在“資源存儲”窗口中打開。在搜索欄中搜索“FMOD for Unity”。
2 檢查資產的主要版本是否與您的 FMOD Studio 版本匹配,即 2.02.xx(此外,由于包含程序集定義,本指南至少需要 2.02.04)。如果不匹配,請改為從 FMOD 網站下載。
3 單擊“添加到我的資產”按鈕。
在 Unity 2019.4 及更早版本中,此按鈕標記為“下載”。
4 確保您已再次登錄 Unity 帳戶。
5 在 Unity 2020.1 及更高版本中,從 Unity 的菜單欄導航到 Window > Package Manager。
6 在“包管理器”窗口中,確保左上角的第二個下拉列表設置為“我的資產”。
7 選擇 FMOD for Unity 資源,然后單擊右下角的下載。
8 在包列表中選擇“FMOD For Unity”,然后單擊“下載”。下載完成后,單擊“導入”按鈕。
9 系統將提示您輸入資產列表,將它們全部勾選,然后單擊“導入”按鈕。
(如果您使用的是 MacOS 10.15 Catalina,此時可能會遇到警告。如果是這樣,請參閱以下內容:Catalina)。
10 “FMOD Setup Wizard”(FMOD 設置向導)窗口打開。單擊“開始”。
11 下一頁用于更新現有的 FMOD For Unity 設置。由于這是第一次,因此單擊“下一步”。
12 選擇 FMOD Studio 項目按鈕,選擇 FMOD Studio 項目文件夾中的文件(如前所述),然后單擊下一步。*.fspro
13 下一頁是刪除原生 Unity 偵聽器并將其替換為 FMOD 偵聽器。單擊“將 Unity 偵聽器替換為 FMOD 音頻偵聽器”,然后單擊“下一步”。
14 此頁面用于禁用 Unity 的內置音頻引擎。由于我們使用 FMOD 引擎處理音頻,因此 Unity 內置音頻引擎無需不斷消耗資源。單擊禁用內置音頻按鈕。
15 此頁面將列出 Unity 項目中的所有 AudioSource Unity 組件。這對于導航到 Unity 項目中的所有 AudioSource 組件非常有用,以便您可以根據需要禁用或刪除。由于我們想充分了解如何添加 FMOD 事件發射器組件并進一步操作它們,因此請保持此頁面不變并單擊下一步。
16 下一頁用于復制在將 FMOD for Unity 與 Unity 項目一起使用時忽略某些文件和文件夾的規則。由于我們未將此 Unity 項目添加到源代碼管理存儲庫,因此請單擊“下一步”。
17 最后一頁是使用 FMOD for Unity 向導執行的所有任務的列表。由于這是一個新項目,并且沒有更改 Unity AudioSources,因此“更新”和“Unity 源”選項卡被列為“不完整”。這是意料之中的,因此請關閉設置向導,讓我們開始將我們的事件放入 Unity 游戲中。
玩游戲并確保“日志”選項卡中沒有顯示錯誤。
祝賀!現在,您已經完成了 FMOD for Unity 的基本設置。本指南的其余部分將重點介紹如何將 FMOD 事件添加到卡丁車微型游戲中。
3.4 添加聲音:卡丁車引擎
如前所述,我們希望玩家的卡丁車使用 Ride-on Mower FMOD 事件。首先,讓我們添加一個組件來觸發事件。
1 在左側的“層次結構”選項卡中選擇 KartClassic_Player/ArcadeEngineAudio 游戲對象。
2 單擊 Inspector 選項卡底部的添加組件。
3 選擇 FMOD Studio > FMOD Studio 事件發射器。
4 將“Play Event”字段設置為“對象啟動”。
5 單擊“事件”字段旁邊的搜索按鈕。
6 在瀏覽器彈出窗口中,雙擊 Events > Vehicles > Ride-on Mower。
7 在“初始參數值”部分下,從下拉列表中添加 RPM 并將值設置為 1000。
玩游戲。您現在應該聽到卡丁車引擎以 1000 的恒定 RPM 值播放。 我們需要做的是將卡丁車的物理特性確定的 RPM 值與 FMOD事件聯系起來。為此,我們將編輯現有的引擎音頻 C# 腳本,以將 RPM 值傳遞給我們的事件。
但是,我們需要編輯的腳本使用程序集定義文件分配給自定義 KartGame 程序集。這意味著,在我們使 KartGame 程序集引用 FMODUnity 程序集之前,它將無法訪問 FMOD 腳本。
8 在窗口底部的“項目”選項卡中,導航到“Assets > Karting > Scripts > KartGame”。
9 在檢查器的“組件定義參照”(Assembly Definition References) 部分中,單擊“+”按鈕。
10 單擊新組件定義參考上的目標圖標,然后選擇 FMODUnity 組件。
11 單擊檢查器底部的“應用”按鈕。
現在,我們可以對引擎音頻腳本進行更改。
12 在左側的“層次結構”選項卡中選擇 KartClassic_Player/ArcadeEngineAudio 游戲對象。
13 單擊 Inspector 窗格中 Arcade Engine Audio 腳本組件上的上下文菜單圖標。
14 選擇“編輯腳本”。
15 腳本文件將在默認代碼編輯器中打開。
16 我們需要用自己的代碼替換現有代碼,因此選擇下面的所有代碼并按 Cmd/Ctrl + C 進行復制。然后返回代碼編輯器,按 Cmd/Ctrl + A 全選,然后按 Cmd/Ctrl + V 粘貼此代碼:
using UnityEngine;namespace KartGame.KartSystems
{/// <summary>/// This class produces audio for various states of the vehicle's movement./// </summary>public class ArcadeEngineAudio : MonoBehaviour{public float minRPM = 0;public float maxRPM = 5000;ArcadeKart arcadeKart;void Awake(){arcadeKart = GetComponentInParent<ArcadeKart>();}void Update(){float kartSpeed = arcadeKart != null ? arcadeKart.LocalSpeed() : 0;// set RPM value for the FMOD eventfloat effectiveRPM = Mathf.Lerp(minRPM, maxRPM, kartSpeed);var emitter = GetComponent<FMODUnity.StudioEventEmitter>();emitter.SetParameter("RPM", effectiveRPM); //核心代碼}}
}
17 保存腳本并關閉文本編輯器。
再次玩游戲。發動機聲音會隨著您加速而變化。但是,發動機仍然需要一些調整。
18 確保在“層次結構”選項卡中仍選擇“KartClassic_Player/ArcadeEngineAudio 游戲對象”。
19 在“引擎音頻”腳本組件下,將“最小 RPM”設置為 500,將“最大 RPM”設置為 2000,以匹配 Ride-on Mower 事件的合理范圍。
再次玩游戲。卡丁車引擎聽起來應該好多了!
3.5 添加聲音:氛圍
現在我們已經讓卡丁車引擎正常工作,讓我們為音景添加一些氛圍。
1 在左側的“層次結構”選項卡中選擇“BackgroundMusic”游戲對象。
2 單擊 Inspector 選項卡底部的添加組件。
3 選擇 FMOD Studio > FMOD Studio 事件發射器。
4 將“Play Event”字段設置為“對象啟動”。
5 單擊“事件”字段旁邊的搜索按鈕。
6 在瀏覽器彈出窗口中,雙擊 Events > Ambience > City。
7 在“初始參數值”部分下,從下拉列表中添加“流量”并將值設置為 0.3。
再次玩游戲。您應該聽到城市氛圍充滿了音景。
3.6 添加聲音:音樂
到目前為止,我們一直在使用 FMOD 示例項目中的事件。讓我們嘗試創建一個新事件。
這將是一個復制原始游戲循環背景音樂的簡單事件。
1 在 FMOD Studio 中,右鍵單擊(或在 Mac 上按住 Command 鍵單擊)“音樂”文件夾,然后選擇“事件默認值”>“2D 時間軸”。
2 輸入活動名稱:“卡丁車音樂”。
3 若要將事件分配給庫進行導出,請在“事件”瀏覽器中右鍵單擊(或在 Mac 上按住 Command 鍵單擊)該事件,選擇“分配給庫”,然后選擇“音樂庫”。
我們將在新的FMOD活動中重用Unity項目中的原創音樂。
4 在 Unity 編輯器中,在窗口底部的“項目”選項卡中,導航到“資源”>“卡丁車”>“音頻>音樂”。
5 右鍵單擊(或在 Mac 上按住 Command 鍵單擊)“音樂”資源,然后選擇“在資源管理器中顯示”(或在 Mac 上選擇“在 Finder 中顯示”)。
6 將 Music.mp3 文件從資源管理器(在 Mac 上為 Finder)窗口拖到 FMOD Studio 事件編輯器窗口,將其拖放到編輯器窗格中 Audio 1 軌道的正文上以創建音頻。
7 單擊播放按鈕并確保可以聽到音樂。
8 單擊停止按鈕結束試鏡。
與原版游戲一樣,我們希望音樂能夠連續循環播放。
9 在前面步驟中創建的儀器上單擊鼠標右鍵(或在 Mac 上按住 Command 鍵單擊),然后選擇“新建循環區域”。
播放事件,并觀察音樂在到達循環區域的末尾時是否循環。
音樂將單獨路由到音效。這樣可以很容易地在以后調整混音。
10 在菜單欄中,選擇 Window > Mixer。這將打開 Mixer 窗口。
11 在 Mixer 窗口的 Routing 瀏覽器中,將“Music/Kart Music”事件拖到“Music”組中。
我們需要構建BANK文件,將新的卡丁車音樂活動納入游戲中。
12 在菜單欄中,選擇“文件”>“生成…”。
接下來,讓我們在游戲中觸發這個事件。
13 在 Unity 中,在左側的“層次結構”選項卡中選擇“BackgroundMusic”游戲對象。
14 單擊 Inspector 選項卡底部的添加組件。
15 選擇 FMOD Studio > FMOD Studio 事件發射器。
16 將“Play Event”字段設置為“Object Start”。
17 單擊“事件”字段旁邊的搜索按鈕。
18 在瀏覽器彈出窗口中,雙擊“事件”>“音樂”>“卡丁車音樂”。
玩游戲以聽到播放的背景音樂。 正如你所聽到的,這有效地復制了原始游戲的音樂播放。但是,您會發現背景音樂淹沒了引擎的聲音。
我們可以使用實時更新在FMOD中快速調整聲音。這適用于 Unity 編輯器和獨立構建。
19 在 Unity 窗口中,單擊播放按鈕并確保游戲正在運行。
20 在 FMOD Mixer 窗口中,單擊窗口底部的 Live Update 按鈕。
21 確保選擇“localhost”地址。這使我們能夠連接到與 FMOD Studio 在同一臺機器上運行的游戲。
22 單擊“連接”按鈕。
請注意,窗口底部的“實時更新”按鈕現在突出顯示,混音器中的電平表顯示游戲中聽到的內容。
23 找到調音臺上的音樂組。您可能需要向右滾動才能找到它。
向下拖動音量推子,將其設置為 -6dB。
音樂應立即降低音量。
實時更新可以快速迭代游戲的音頻。
現在是嘗試根據自己的喜好調整事情的好時機。例如,單擊“音樂”組后,您會發現您可以在卡座中編輯聲像和音高設置,或者添加 DSP 效果來更改聲音質量。
請注意,如果斷開實時更新的連接,則在退出播放模式時,Unity 中的音頻將恢復到以前構建的狀態。要提交更改,請在 FMOD Studio 中重建庫。
3.7 刪除現有音頻
在開始添加 FMOD Studio 事件之前,最好刪除項目中當前存在的預先存在的 Unity AudioSource。
1 導航到 FMOD > 設置向導,然后單擊 Unity Sources 選項卡。從其列表中選擇以下游戲對象以自動導航到它們(或者,可以在 Unity 編輯器的“層次結構”選項卡中找到這些對象):
a 游戲管理器/游戲HUD
b 背景音樂
c KartClassic_Player/ArcadeEngine音頻/引擎空閑
d KartClassic_Player/ArcadeEngine音頻/engine_start
e KartClassic_Player/ArcadeEngine音頻/引擎運行
f KartClassic_Player/ArcadeEngine音頻/引擎反轉
g KartClassic_Player/街機引擎音頻/漂移
2 對于這些游戲對象中的每一個:
a 選擇游戲對象
v 單擊右側“檢查器”窗格中“音頻源”組件上的上下文菜單圖標。
c 選擇“刪除組件”。
從 GameManager/GameHUD 對象中刪除音頻源將導致反饋 Flash HUD
腳本中出現錯誤。要解決這個問題,我們需要編輯FeedbackFlashHUD.cs。
3 選擇 GameManager/GameHUD 對象。
4 向下滾動到“檢查器”選項卡中的“反饋閃光 HUD”組件,然后單擊上下文菜單圖標。
5 選擇“編輯腳本”,在默認代碼編輯器中打開腳本文件。
6 刪除所有包含 的行。m_audioSource
7 保存腳本并關閉文本編輯器。
還有一個 Game Flow Manager 組件,用于在通過最終檢查點時創建 AudioSource
組件。為了擺脫這種情況,我們需要編輯GameFlowManager.cs。
8 選擇 GameManager 對象。
9 向下滾動到 Game Flow Manager 組件,然后單擊上下文菜單圖標。
10 選擇“編輯腳本”,在默認代碼編輯器中打開腳本文件。
11 刪除所有包含 的行。audioSource
12 保存腳本并關閉文本編輯器。
還有一些組件會調用(創建 AudioSource
組件)以在您撞到墻或通過檢查點時播放聲音效果。為了擺脫這些,我們需要編輯AudioUtility.cs。AudioUtility.CreateSFX
13 在窗口底部的“項目”選項卡中,導航到“AudioUtility”>“AudioUtility”>“Assets > Scripts > Utilities”。
14 雙擊 AudioUtility 腳本以在默認代碼編輯器中將其打開。
15 刪除函數的內容(第 19-29 行)。CreateSFX
16 保存腳本并關閉文本編輯器。
還有一個 Objective Toast 組件,用于在目標消息出現時創建 AudioSource
組件。為了擺脫這些,我們需要編輯ObjectiveToast.cs。
17 在窗口底部的“項目”選項卡中,導航到 ObjectiveToast > ObjectiveToast > > UI > Assets Karting Scripts。
18 雙擊 ObjectiveToast 腳本,在默認代碼編輯器中將其打開。
19 刪除除以 開頭的行之外的所有包含的行。PlaySoundvoid PlaySound
20 保存腳本并關閉文本編輯器。
如果您再次玩游戲,警告將得到修復。但是,您可能會注意到起跑線聲音繼續播放。這些是由 Unity 時間線資源觸發的,我們也可以將其刪除。
21 在窗口底部的“項目”選項卡中,導航到 Assets > Karting > Timelines > RaceStart。
22 雙擊 RaceStart 資源以在編輯器中將其打開。
在顯示的“時間軸”選項卡中,單擊“音軌”上下文菜單圖標,然后選擇“刪除”。
再玩一次游戲。不應聽到任何音頻,也不應在“日志”選項卡中顯示任何警告。
3.8 下一步
在本指南中,您學習了如何將 FMOD 添加到現有 Unity 游戲中。我們還替換并改進了游戲的聲音,讓世界感覺更加生動。
要了解有關 FMOD 和 Unity 的更多信息,請參閱以下資源:
- 維京村 - 視頻教程系列
- 生存射擊游戲 - 視頻教程系列
- FMOD Studio - 用戶手冊
10. 腳本 API 參考
FMOD Studio Unity Integration 以 C# 公開完整的 FMOD Core 和 Studio API。
Studio API 用于播放和控制在 FMOD Studio 工具中創建的事件。
核心 API 用于直接播放聲音以及事件播放的高級控制。
運行時管理器 API 為編寫使用 FMOD Studio 事件的 Unity 游戲組件時的最常見操作提供了幫助程序。
10.1 基礎知識
初始化時,它會創建一個 和 一個 .您可以使用其中任何一個和/或所有這些來訪問 API。
RuntimeManagerStudio SystemCore Systemvar studioSystem = FMODUnity.RuntimeManager.StudioSystem;
FMOD.Studio.CPU_USAGE cpuUsage;
studioSystem.getCPUUsage(out cpuUsage);var coreSystem = FMODUnity.RuntimeManager.CoreSystem;
uint version;
coreSystem.getVersion(out version);
10.2 Unity Inspector 中的瀏覽器 UI
您可以使用以下方法之一訪問自定義 FMOD UI 以選擇事件、庫和全局參數:
10.2.1 事件
使用 EventReference 類型來保存對 Event 的引用。
public class EventReferenceTest : MonoBehaviour
{public FMODUnity.EventReference MyEvent;
}
您將看到以下 UI:
10.2.2 BANK
在用于保存 Bank 路徑的任何字符串屬性上使用屬性“[FMODUnity.BankRef]”。
public class BankRefTest : MonoBehaviour
{[FMODUnity.BankRef]public string MyBank1;
}
您將看到以下 UI:
10.2.3 全局參數
在用于保存全局參數路徑的任何字符串屬性上使用屬性“[FMODUnity.ParamRef]”。
public class ParamRefTest : MonoBehaviour
{[FMODUnity.ParamRef]public string MyParam1;
}
您將看到以下 UI: