[团队] 在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

智能推荐

Day6 Numerical simulation of optical wave propagation之通过随机介质(如大气湍流)的传播(二)...-程序员宅基地

文章浏览阅读644次。2.蒙特卡洛相位屏大气折射率变化是一个随机的过程,通过大气的光程长度也同样是随机的。因此,湍流模型仅给出统计平均值,如折射率变量的结构函数和功率谱。建立大气相位屏的问题就是产生随机过程独立表达式的问题,即相位屏的建立是通过把计算机产生的随机数变换为采样点网格上的两维相位值阵列来实现的,相位值阵列具有与湍流引起的相位变化相同的统计特性。为了在有限的网格上生成相位屏,相位通常被写成各种基底..._随机介质的相位屏

如何快速从基因组中提取基因、转录本、蛋白、启动子、非编码序列?-程序员宅基地

文章浏览阅读1.3w次,点赞12次,收藏73次。NGS基础 -GTF/GFF文件格式解读和转换这篇文章有读者留言想要提取外显子,内含子,启动子,基因体,非编码区,编码区,TSS上游1500,TSS下游500的序列。下面我们就来示范如何..._如何快速从基因组中提取

如何在vue项目中使用less公共变量以及vant ui中定制主题_引入公用的less-程序员宅基地

文章浏览阅读3.3k次。在vue项目中使用正确是用less公共变量,并且搭配UI框架的使用._引入公用的less

毕设项目 基于wifi的室内定位算法设计与实现_基于wifi信息采集与定位设计方案-程序员宅基地

文章浏览阅读560次,点赞10次,收藏12次。今天学长向大家分享一个毕业设计项目毕业设计 wifi室内定位系统学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:4分毕业设计 wifi室内定位算法实现今天来介绍一下室内定位相关的原理以及实现方法;WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关,也常有人把Wi-Fi当做IEEE 802.11标准的同义术语。_基于wifi信息采集与定位设计方案

Python学习(二)列表,for循环,切片,元组_列表和for循环-程序员宅基地

文章浏览阅读979次。文章目录Python学习(二)列表访问列表元素修改列表元素在列表中插入元素在列表末尾插入元素在列表中插入元素删除列表元素使用del语句删除元素使用`pop()`删除元素根据值删除元素对列表进行排序逆序打印列表获取列表的长度列表索引错误for循环for循环的基本格式在循环结束后执行操作for循环的常见错误忘记缩进进行了不必要的缩进遗漏冒号数值列表使用`range()`函数生成一系列数字将`range()`函数生成的数字转换为数字列表对数字列表简单的统计列表解析切片遍历切片复制列表元组遍历元组的所有值修改元组变_列表和for循环

aop切面获取方法参数,注解,及判断是否成功执行-程序员宅基地

文章浏览阅读7.2k次。@Around(value = "controllerAspect()") public Object around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("进入切面"); Object[] args = pjp.getArgs(); System.ou..._切面获取方法参数

随便推点

数据结构与算法_C语言链表案例_链表字符串数据结构与算法(c语言版)-程序员宅基地

文章浏览阅读151次。#define _CRT_SECURE_NO_WARNINGS#include "stdio.h"#include "stdlib.h"#include "string.h"//设计链表节点typedef struct __LINKNODE{ void*data; struct __LINKNODE*next;}LinkNode;//设计链表管理结构体 由于多了m_Size 可以更方便管理节点typedef struct __LINKLIST{ LinkNode*pHead_链表字符串数据结构与算法(c语言版)

基于SpringBoot+Vue的学生信息管理系统设计实现(源码+lw+部署文档+讲解等)_学生信息管理系统 vue3+springboot-程序员宅基地

文章浏览阅读914次,点赞15次,收藏18次。博主介绍:全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐Java精品实战案例《500套》微信小程序项目精品案例《500套》文末获取源码+数据库。_学生信息管理系统 vue3+springboot

pyqt QMessageBox自动关闭_pyqt messagebox的关闭-程序员宅基地

文章浏览阅读8.2k次,点赞4次,收藏12次。 infoBox = QtGui.QMessageBox() ##Message Box that doesn't run infoBox.setIcon(QtGui.QMessageBox.Information) infoBox.setText("保存完成!") info..._pyqt messagebox的关闭

matlab中如何改变坐标轴显示的数字_matlab改变坐标轴数值-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏26次。1、首先打开电脑上的“matlab”软件,主界面如下图所示,箭头处输入代码百即可运行。2、下面输入代码绘制图像,此处以简单的正弦函数为例。3、点击enter键之后,即可运行程序度绘制图像,正弦函数图像如下图所示,可以问看到x和y的坐标轴答刻度内。容4、下面使用set(gca,'XTick',0:pi/2:2*pi);set(gca,'XTicklabel',{'0','pi..._matlab改变坐标轴数值

android studio 修改代码不生效,终极解决方案!_android13 studio loge不生效-程序员宅基地

文章浏览阅读6.7k次。android studio 修改代码不实时生效android studio 版本4.1.2问题描述修改代码例如,添加如 Log.d(TAG, “修改代码是否生效”);真机运行 没有生效,二次三次运行,才会打印此log。删除这条log,再次运行,依然打印此log,再运行,生效。如果修改了这个log,运行之前先clear一下,运行结果是会实时生效的。但是不能每次都clear吧。分析原因新版的 Android Studio 引入了 instant run 功能,也就是俗称的热补丁技术,但是热_android13 studio loge不生效

交易延展性攻击原理(防止自己被攻击)_ecdsa延展性-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏6次。数字世界攻防是最有意思的事情,通读了延展性攻击原理后,任何使用类似算法和签名结构的数字货币都会面临这个攻击风险,虽然这个攻击不会实质性改变交易,但是足够影响一些心急的发送者,这就是攻防的魅力,永远接受挑战,越战越强交易延展性交易的延展性,也被称作为是可锻性,即同样一个东西,它的本质和质量都没有改变,但是它的形状改变了。而这个可锻性,会造成交易ID——TXID的不一致,从而导致用户找不到发送的交易。现在比特币的交易数据格式中,将交易签名部分也纳入了整体交易中,最后对整体交易做哈希,而交易签名又可以有多_ecdsa延展性

推荐文章

热门文章

相关标签