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: