[Unity 3D] 使用Audio Mixer分别控制主音量、背景音乐和其他音效

news/2024/9/8 4:09:36/

前言

在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击、爆炸之类)的音量,这时我们可以用Audio Mixer来解决。

如果文章中有哪些地方写的不对, 欢迎指出。

 

提醒

在这篇教程中我将重新创建一个简单的工程来给大家演示,并且我当前使用的Unity版本为2018.1.1f1。

本文并非零基础教程,但是写了有点太详细,且有大约30张图,所以又臭又长...

工程中用到3个音频文件作为测试,分别为背景音乐、玩家攻击和敌人爆炸。

 

正文

1、新建工程导入资源

将3个音频文件放在Audio目录下:

 

2、创建音量调节面板UI

 创建了3个滑动条分别控制主音量、音乐和音效,并且将滑动条的默认值设为1:

 

3、创建声音播放源

(1)背景音乐

创建一个空物体(GameObject)来作为背景音乐的载体,改名为Background Music,添加一个Audio Source组件(要使用Audio Mixer控制音量必须要用Audio Source来播放音频),将背景音乐音频文件拖到AudioClip中,勾选Loop让背景音乐循环播放:

(2)玩家攻击音效

创建一个空物体改名为Player,添加Audio Source组件,将玩家攻击音效拖入AudioClip,取消勾选Play On Awake

 并且添加了一个名为Player的脚本(脚本放在Scripts文件夹下)来模拟玩家攻击播放攻击音效,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{private AudioSource audioSource;void Start (){audioSource = GetComponent<AudioSource>();}void Update () {if (Input.GetKeyDown(KeyCode.Q)){audioSource.Play();    // 按下Q键播放玩家攻击音效}}
}

(3)敌人爆炸音效

和设置Player步骤相同,只不过物体和脚本名变成了Enemy,播放按键设为E,拖入敌人爆炸音效,取消勾选Play On Awake

 

3、创建Audio Mixer

1. 在Audio文件夹下创建Mixers文件夹,右键点击Mixers文件夹 --> Creat --> Audio Mixer:

2. 创建后改名为MasterMixer,我们用这个Audio Mixer来控制全局音量;双击打开我们创建的MasterMixer,将打开的窗口拉出来方便我们查看:

3. 接下来我们单击选择Groups下的Master,再点击Groups右边的 + 添加成员;我们需要创建两个成员,分别命名为Music和SoundEffect:

4. 我们会发现MasterMixer下多出了几个东西

5. 我们要用Music成员来控制背景音乐,所以我们把Music成员拖到Background Music物体的Audio Source组件下的Output中:

6. 然后我们点击Mixers右边的 + ,再创建一个名为SoundEffectMixer的Audio Mixer,我们用这个Mixer而来管理玩家攻击和敌人爆炸音效,并且将这个Mixer也放到Mixers文件夹下,方便管理:

7. 然后我们选择刚创建的SoundEffectMixer,单击选择Master,点击Groups右边的 + ,创建两个成员,分别为PlayerAttack和EnemyExplosion,分别代表玩家攻击和敌人爆炸音效:

8. 我们再次单击左键选择SoundEffectMixer,拖到上面的MasterMixer,然后会弹出一个窗口,选择SoundEffect:

9. 将PlayerAttack成员拖到Player物体的Audio Source组件下的Output中;

将EnemyExplosion成员拖到Enemy物体的Audio Source组件下的Output中:

10. 我们现在看一下Mixer和成员间的层级关系:

现在我们可以通过MasterMixer下的Master来控制全局主音量,通过Music来控制背景音乐音量,通过SoundEffect来控制玩家攻击和敌人爆炸音效。

 

4、暴露参数

我们需要先将Master、Music和SoundEffect的参数暴露(Expose)出来,这样我们才可以通过代码去控制音量:

1. 首先暴露出Master的参数:

2. 然后点击Exposed Parameters,选择我们刚暴露出来的Master的参数,按下F2更改名字为MasterVolume:

3. 对Music和SoundEffect进行同样的操作(1,2步操作),然后我们就有3个暴露出来的参数:

 

5、控制音量

现在我们有了参数就可以让我们控制音量了,那么接下来就进行音量的控制:

1. 在Menu Canvas(也可以新建一个空物体,随意)下新建一个脚本名为AudioManager,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class AudioManager : MonoBehaviour
{public AudioMixer audioMixer;    // 进行控制的Mixer变量public void SetMasterVolume(float volume)    // 控制主音量的函数{audioMixer.SetFloat("MasterVolume", volume);// MasterVolume为我们暴露出来的Master的参数}public void SetMusicVolume(float volume)    // 控制背景音乐音量的函数{audioMixer.SetFloat("MusicVolume", volume);// MusicVolume为我们暴露出来的Music的参数}public void SetSoundEffectVolume(float volume)    // 控制音效音量的函数{audioMixer.SetFloat("SoundEffectVolume", volume);// SoundEffectVolume为我们暴露出来的SoundEffect的参数}
}

2. 将MasterMixer拖到AudioManager脚本上:

3. 然后我们将3个滑动条分别绑定这3个函数:

4. 将3个滑动条都绑定号函数后,我们就可以通过滑动条来分别控制Master、Music和SoundEffect的值了:


5. 但是现在滑动条只能让参数的值在1和0间变化,声音大小没有变化,所以我们需要修改滑动条的最小值和最大值来解决;

我们先要测试下声音的大小区间,点击Edit in Play Mode,拖动滑动块,找出声音最小和最大的值:

6. 然后我们修改滑动条的最小值和最大值:

7. 全部滑动条都调整好了之后我们就可以正常调节音量的大小了;

(1)主音量控制全局音量(包括了背景音乐和音效)

(2)音乐控制背景音乐

(3)音效控制玩家攻击和敌人爆炸音效

 

4、结束语

完结撒花,累死我了...


http://www.ppmy.cn/news/891566.html

相关文章

ffmpeg av_parser_parse2函数分析各种码流测试程序

ffmpeg av_parser_parse2函数分析各种码流测试程序 ---------------------------------------- author: hjjdebug date: 2023年 07月 14日 星期五 16:14:05 CST ---------------------------------------- 测试程序见后, 可编译运行(ffmpeg v4.4) 我需要一个简单的程序,实现能跟…

Markdown语法大全

使用Markdown进行文档编辑 Markdown是一种轻量级的标记语言&#xff0c;广泛用于编写文档和格式化文本。它具有简洁、易读、易写的特点&#xff0c;适用于各种场景&#xff0c;如写博客、编写文档、撰写README文件等。 标题 在Markdown中&#xff0c;你可以使用不同数量的#符…

windows与linux文件格式转换

windows和linux文件的转换 由于windows与unix系统的换行不一致&#xff0c;因此需要相互之前的格式转换 只需要在linux上执行 dos2unix filename 将windows下的文本文件转换成linux上可以浏览的文件 unix2dos filename 将unix格式的文件转化成windows下的格式

各种文件格式转换

http://www.alltoall.net/ 在线文件转换导航是一款支持200多种格式的在线转换工具&#xff0c;并且完全免费。 它支持视频格式&#xff0c;音频格式&#xff0c;图片格式&#xff0c;常见文档&#xff0c;表格格式&#xff0c;演示用文档格式&#xff0c;电子书格式&#xff…

【免费】文件格式转换网站

下面这个网站是一个文件格式转换的免费网站。我们平常都会用到想要PDF文件转换为word文件&#xff0c;但是WPS是会员才可以转换的&#xff0c;这个时候需要一个免费的网站需要支持这个操作。这个网站不止有这一个功能&#xff0c;它可以支持多种文件互相转换&#xff1a; https…

转换 Windows 文件格式为 UNIX 格式

由于结尾符号的差异&#xff0c;Windows格式的文件在 Linux 环境下经常会出一些莫名其妙的问题&#xff0c;比如&#xff0c;git提交出现警告信息&#xff0c;nodejs执行报错等。 作为最佳实践&#xff0c;最好让程序文件的格式一直使用 UNIX 格式。转换 Windows 格式文件为 U…

同一局域网下电脑传输文件的方式(超简单!)

在同一个局域网下&#xff0c;怎么才能快速的在两台甚至多台电脑下传输文件&#xff1f;&#xff1f;&#xff1f; 1.首先在想要接收文件的电脑下新建文件夹 右击文件夹–>选择属性 点击共享文件夹 点击共享 此时文件夹已经在局域网里面共享啦&#xff01;&#xff01;&…

文件格式转换网站

链接: https://www.hipdf.com/

Linux 与 Windows 不同系统的文件格式转换

windows文件格式转linux csv转为linux可识别 dos2unix order.csv bash脚本转为linux可识别 sed -i "s/\r//" kubot_run_time.sh

计算机转换几种,文件转换 篇一:有多少种文件格式转换的方法,你造吗?

文件转换 篇一&#xff1a;有多少种文件格式转换的方法&#xff0c;你造吗&#xff1f; 2019-01-14 16:21:39 2点赞 1收藏 1评论 不管是学生党、上班族&#xff0c;还是其他领域的worker&#xff0c;都是要用到各类文件格式保存的文件&#xff0c;那你们是否有遇到有打不开的文…

局域网传输/共享大文件

局域网传输/共享大文件 前段时间和同学传一个4g的数据。想到如下几个点子 通过qq进行传输&#xff0c;但是要上传&#xff0c;还要下载&#xff0c;还要网速给力才行&#xff0c;而且花费的可是双倍的时间&#xff0c;一个上传一个下载&#xff0c;等的黄花菜都凉了。通过u盘…

win10搭建ftp服务器实现局域网文件互传

最近实验室服务器环境配好了&#xff0c;可以愉快的跑代码了。但是如果要把代码以及数据集要转移到服务器硬盘上&#xff0c;现在的做法都是先保存到网盘&#xff0c;然后再下载到服务器&#xff0c;有点太麻烦了。故想到了配置ftp服务器实现局域网内直传&#xff0c;遂写了这篇…

局域网使用Ftp共享文件

最近需要共享一些文件,文件有大有小。以前都是采用映射网络驱动器的办法&#xff0c;但是后来发现许多人映射之后总是忘记断开连接&#xff0c;这样一方面有时会因为连接的人数过多导致别人不能再连接到服务器&#xff1b;另一方面当服务器关闭后&#xff0c;如果映射的驱动器没…

HTTPS证书文件格式转换

该文章转载自 OHTTPS.COM - 免费申请HTTPS通配符证书、自动更新、自动部署 在部署HTTPS证书时&#xff0c;不同的服务器我们需要用到不同格式的证书文件&#xff0c;常见的证书文件格式有以下几种&#xff1a; PEM 适用于Apache、Nginx、Candy Server等Web服务器常见的文件后缀…

java 文件格式转换

java 系列文章 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 java 系列文章前言一、base64 转 MultipartFile1. 直接调…

windows与unix文件格式转换

最近使用Linux&#xff08;CentOS&#xff09;发现&#xff0c;Windows 下的文本到Linux下的vi中可以浏览出现^M&#xff0c;而Linux下的文本到Windows下后发现凡是“回车”部分全是“黑块”&#xff0c; 原因&#xff1a; DOS/Windows和Linux/Unix的文件换行回车格式不同&am…

openOffice 转换文件格式

引言&#xff1a;突然接到任务&#xff0c;要将word或者ppt转换成HTML的格式在页面上显示&#xff0c;类似于百度文库的效果。以前也听说过&#xff0c;觉得用java实现起来还是很简单的。于是我就带着我的任务以及我的好奇心出发了&#xff0c;在网上找了些资料&#xff0c;最终…

电脑同局域网怎么传输文件

文章目录 一、 打开网络和共享中心&#xff0c;点击更改高级共享设置。二、 点击这三个选项三、 选择要共享的文件夹&#xff0c;右键属性&#xff0c;点击共享&#xff0c;添加“everyone” 一、 打开网络和共享中心&#xff0c;点击更改高级共享设置。 二、 点击这三个选项 三…

通过cmd进行文件格式的转换

步骤如下&#xff1a; 1.将你需要转换的文件中的所有最小子文件复制在相应盘的根目录下&#xff0c;用命令盘名&#xff1a;进行转盘&#xff1b;&#xff08;ps:也可不用复制&#xff0c;只要将路径找到就好) 2.输入命令copy/b 最小子文件名称的首个字符*.当前的文件格式 转…

构建文件格式转换服务器

构建文件格式转换服务器 1. 为什么要做文件格式转换服务器 不知道各位是否遇到这样的情况&#xff0c; 当您在浏览IBM SUN等公司的技术网站的时候&#xff0c; 你会发现在每个页面的上方有小图标&#xff0c; 你可以把当前的页面内容以word&#xff0c; pdf或者是其他的格式进…