[团队] 在Unity项目中使用FMOD来管理你的音效_unity fmod-程序员宅基地

技术标签: unity  编辑器  Unity  团队  游戏引擎  

Hello各位小伙伴, 今天来聊一下Unity项目中的音效管理.

我目前正在研发的项目, 使用了FMOD的来管理音效和背景音乐.

FMOD本身是一款免费的音频集成工具. 自身的音效编辑器还拥有强大的编辑功能.

首先, 做一个简单的入门说明:

获取FMOD编辑器:

首先进入官网 https://www.fmod.com/download 下载对应平台的编辑器软件 (需要先注册一个FMOD的账号)

选择对应你操作系统的软件版本, 下载并安装:

安装软件, Mac系统直接拖拽, Windows可以选择你要安装的路径

打开FMOD Studio 编辑器, 默认打开就是一个新工程, 可以先选择保存工程, 下一步方便我们使用. 如果已经有现成的项目. 可以选择菜单上的 File/Open, 或者干脆直接双击 *.fspro 打开项目.

首先我们需要从外部将各个原始的音频文件导入项目, 可以使用菜单 File/Import Assets... 来导入.

原音频文件会从目标目录拷贝到项目 Assets 目录下.

但是实际操作起来, 一个比较快的方式是直接将你想要的资源拷贝到项目 Assets 目录下, 建议对于所有的音频文件进行统一的命名和整理. 在例子中我们统一采用 字母小写 + 下滑线的方式命名各种音频. 

编辑音频项目[Studio]

导入资源后, 我们要开始建立对应的音频事件. 

首先进入工程后, 我们可见刚导入的音效文件显示 #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文件[Studio]

编辑工作完成后, 下一步是打包Bank文件

首先, 设置一下你输出的平台, 打开软件的 Perferences 菜单, Build页, 根据你发布的平台来设置你要打包的平台类型. PC和Mac应用使用Desktop预设即可, 手游可以添加Mobile平台, 并配置压缩品质 (Demo里我们使用默认的配置)

Built banks output directory 选框内, 可将路径直接设置到当前对应的Unity项目音频配置路径内.

设置完毕后, 进入 File/Build 构建当前平台的Bank, 多平台请直接选择 Build All Platforms

本例中, 将构建路径设置为Unity项目根目录下 FMOD 文件夹内, 构建后如图: 

 

导入FMOD插件[Unity]

在FMOD官网可下载到对应Unity版本的Plugins插件包:

 打开Unity项目. 双击导入插件包, 并按照提示进行整合和设置.

导入后, 首次弹出引导面板时可进行对应的配置

 在上步中若设置过Unity项目路径, 则可直将 Multiple Platform Build 路径设置为 /FMOD 目录

如果在一开始不小心关闭了初始化引导也不要紧, 可以直接进入FMOD Settings 文件内进行配置 

 

导入后请打开 FMOD/Event Browser 进行确认, 观察音效是已获得更新:

调用音频事件[Unity]

音频导入结束后, 便可着手编辑音频事件了.

基于MonoBehaviour的组件调用可以直接参照教程和例子

音频事件可直接挂载到 GameObject 上, 通过属性菜单可为指定的音频事件编辑开始和结束的事件

如果是中大型项目, 有完善的音频管理器, 可在对应调用的环节使用代码触发音频播放:

这里贴一段示例引用, 注意: 音效路径可在 FMOD/Event Browser 中复制得到

using FMOD.Studio;
using FMODUnity;
using UnityEngine;

public class Main : MonoBehaviour
{
    // 音效实例引用
    private EventInstance _sfxButtonClicked;
    
    /// <summary>
    /// 按钮点击时播放音效
    /// </summary>
    public void OnButtonClick()
    {
        if (!_sfxButtonClicked.isValid())
            _sfxButtonClicked = CreateInstance("event:/ui_click");
        
        _sfxButtonClicked.start();
    }
    
    /// <summary>
    /// 创建音效
    /// </summary>
    /// <param name="eventPath"></param>
    /// <returns></returns>
    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 包导入并进行热更操作.

以上!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Eric_q8666/article/details/121930963

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签