Hello各位小伙伴, 今天来聊一下Unity项目中的音效管理.
我目前正在研发的项目, 使用了FMOD的来管理音效和背景音乐.
FMOD本身是一款免费的音频集成工具. 自身的音效编辑器还拥有强大的编辑功能.
首先, 做一个简单的入门说明:
首先进入官网 https://www.fmod.com/download 下载对应平台的编辑器软件 (需要先注册一个FMOD的账号)
选择对应你操作系统的软件版本, 下载并安装:
安装软件, Mac系统直接拖拽, Windows可以选择你要安装的路径
打开FMOD Studio 编辑器, 默认打开就是一个新工程, 可以先选择保存工程, 下一步方便我们使用. 如果已经有现成的项目. 可以选择菜单上的 File/Open, 或者干脆直接双击 *.fspro 打开项目.
首先我们需要从外部将各个原始的音频文件导入项目, 可以使用菜单 File/Import Assets... 来导入.
原音频文件会从目标目录拷贝到项目 Assets 目录下.
但是实际操作起来, 一个比较快的方式是直接将你想要的资源拷贝到项目 Assets 目录下, 建议对于所有的音频文件进行统一的命名和整理. 在例子中我们统一采用 字母小写 + 下滑线的方式命名各种音频.
导入资源后, 我们要开始建立对应的音频事件.
首先进入工程后, 我们可见刚导入的音效文件显示 #unimported 的标签. 选中对应的音效, 在右键菜单内点击 Import 导入音频
导入后, 在音效 ui_click 上, 右键菜单, 选择 Create Event. 鉴于这是一个普通的UI点击音效, 无需特殊设置, 可以选择 2D Action. (3D音效对应你的游戏场景, 可选择3D环绕立体声, 视情况而定)
而对于背景音乐 music_level_1.mp3, 之后需要设置循环播放, 所以选择 2D Timeline. 然后进入到 Events 面板, 点击对应的音频, 在右侧 Timeline 编辑界面上点击右键, 并选择 Add Loop Region 为其添加循环事件属性
OK, 目前已有的一个点击音效和一段BGM已经准备就绪, 但是右侧仍显示 #unassigned 的字样. 我们需要将每个音频分配到对应的 .bank 文件内, 压缩为对应的二进制文件. FMOD默认有一个 Master Bank, 不要轻易的删除这个文件. 我们可将目前的两个文件都分配到 Master Bank 即可
对了, 别忘了 Ctrl + S 保存你的工程.
编辑工作完成后, 下一步是打包Bank文件
首先, 设置一下你输出的平台, 打开软件的 Perferences 菜单, Build页, 根据你发布的平台来设置你要打包的平台类型. PC和Mac应用使用Desktop预设即可, 手游可以添加Mobile平台, 并配置压缩品质 (Demo里我们使用默认的配置)
在 Built banks output directory 选框内, 可将路径直接设置到当前对应的Unity项目音频配置路径内.
设置完毕后, 进入 File/Build 构建当前平台的Bank, 多平台请直接选择 Build All Platforms
本例中, 将构建路径设置为Unity项目根目录下 FMOD 文件夹内, 构建后如图:
在FMOD官网可下载到对应Unity版本的Plugins插件包:
打开Unity项目. 双击导入插件包, 并按照提示进行整合和设置.
导入后, 首次弹出引导面板时可进行对应的配置
在上步中若设置过Unity项目路径, 则可直将 Multiple Platform Build 路径设置为 /FMOD 目录
如果在一开始不小心关闭了初始化引导也不要紧, 可以直接进入FMOD Settings 文件内进行配置
导入后请打开 FMOD/Event Browser 进行确认, 观察音效是已获得更新:
音频导入结束后, 便可着手编辑音频事件了.
基于MonoBehaviour的组件调用可以直接参照教程和例子
音频事件可直接挂载到 GameObject 上, 通过属性菜单可为指定的音频事件编辑开始和结束的事件
如果是中大型项目, 有完善的音频管理器, 可在对应调用的环节使用代码触发音频播放:
这里贴一段示例引用, 注意: 音效路径可在 FMOD/Event Browser 中复制得到
using FMOD.Studio;
using FMODUnity;
using UnityEngine;
public class Main : MonoBehaviour
{
// 音效实例引用
private EventInstance _sfxButtonClicked;
///
/// 按钮点击时播放音效
///
public void OnButtonClick()
{
if (!_sfxButtonClicked.isValid())
_sfxButtonClicked = CreateInstance("event:/ui_click");
_sfxButtonClicked.start();
}
///
/// 创建音效
///
///
///
public EventInstance CreateInstance(string eventPath)
{
var instance = RuntimeManager.CreateInstance(eventPath);
return instance;
}
}
当前版本的FMOD自带ignore配置, 请导入插件后, 自行将对应的忽略配置添加到 .gitignore文件中:
Editor 运行时展示的 FMOD Debug 面板可在 FMOD Settings 内设置关闭
若Bank 文件过大, 或者基于未来动态扩展考虑, 可将部分音频分配到不同Bank内, 在导入时需要选择对应的类型, 默认是将Bank文件拷贝到 Streaming Assets路径下. 也可以作为 AB 包导入并进行热更操作.
以上!