前言
在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击、爆炸之类)的音量,这时我们可以用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、结束语
完结撒花,累死我了...
————————————————
原文链接:https://blog.csdn.net/iFasWind/article/details/81182579

unity混音的更多相关文章

  1. [Android] 混音线程MixerThread

    MixerThread是Android音频输出的核心部分,所有Android的音频都需要经过MixerThread进行混音后再输出到音频设备. MixerThread的继承关系如下: MixerThr ...

  2. WebRTC 学习之 Conference 实现混音混屏

    混音 混音的意义就是将多个音频流混成一路音频,在Conference 的实现中有分为终端实现和服务器实现. 1. 终端混音实现: 终端接受到多路(一般是多个用户)的音频流之后,在终端本地将多路音频流混 ...

  3. (二) ffmpeg filter学习--混音实现

    Audio 混音实现 从FFMPEG原生代码doc/examples/filtering_audio.c修改而来. ffmpeg版本信息 ffmpeg version N-82997-g557c0df ...

  4. XAudio2学习之混音

    XAudio2不仅能够进行採样率转换.还能够进行混音.所谓混音就是将多路音频混合成一路进行输出.混音主要是IXAudio2SubmixVoice进行此项功能. 数据由IXAudio2SourceVoi ...

  5. ffmpeg混音(将多个声音合成一个)命令

    ffmpeg命令中可以使用filter amix实现这个功能. 官方文档 http://ffmpeg.org/ffmpeg-filters.html 6.8 amix Mixes multiple a ...

  6. pcm混音的一种方式

    转载 混音: Mix的意思是混音,无论在自然界,还是在音频处理领域这都是非常普遍的现象.自然界里你能同时听到鸟鸣和水声,这是因为鸟鸣和水声的波形在空气中形成了叠加,耳朵听到后能区分鸟鸣和水声这两种波形 ...

  7. C#混音同时录制采集声卡和麦克风话筒

    在项目中,我们可能需要同时录制声卡的声音和麦克风的声音,比如直播间,在线教学.那么如何实现呢?当然是采用SharpCapture!下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步: ...

  8. 2019 WebRtc AudioMixer混音流程

    本文简要说明最新版WebRtc AudioMixer混音流程. 本程序使用4个16KHz 单声道时长均大于10秒的Wav文件作为混音源,只合成前10秒的音频,输出也是16KHz单声道音频. 输入和输出 ...

  9. FL Studio带你走进混音的世界

    混音,是把多种音源整合到一个立体音轨或单音音轨中,通俗讲就是对多种声音进行调整后叠加在一起,这样可以让音乐听起来非常有层次感,尤其是在电音制作过程中,混音的质量更是起到了决定性的作用.音乐制作软件FL ...

随机推荐

  1. timestamp和datetime

    datetime数据类型在MySQL之前占8个字节,5.6之后占5个字节,datetime的范围1000-01-01 00:00:00------9999-12-31 23:59:59,格式采用YYY ...

  2. python继承之super

    super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复调用( ...

  3. Hadoop-No.3之序列化存储格式

    序列化存储指的是将数据结构转化为字节流的过程,一般用于数据存储或者网络传输.与之相反, 反序列化是将字节流转化为数据结果的过程.序列化是分布处理系统(比如Hadoop)的核心,原因在于他能对数据进行转 ...

  4. Http中的三种请求处理模式(MPM)的区别

    MPM---包括基于事件/异步,线程化和预分叉 MPM(multi-processing module)多种请求处理模式,分为三种工作模式: prefork worker event prefork- ...

  5. python2.6切换python3.4的操作记录

    python2.6切换python3.4的操作记录 之所以写这个记录,源于昨日下午,因为开发人员使用脚本清洗数据,而导致生产环境数据异常,需要根据binlog日志进行回滚.但在使用binlog2sql ...

  6. robotframework FOR循环

    #获取到的ID组装成一个list ${List_ID} Create List ${ID_1} ${ID_2} ${ID_3} ${ID_4} ${ID_5} ... ${ID_6} ${ID_7} ...

  7. 配置并访问NFS共享

    NFS服务器 192.168.2.5 NFS客户机 192.168.2.100 软件包nfs-utils用来提供NFS共享服务及相关工具,而软件包rpcbind用来提供RPC协议的支持 服务器 修改/ ...

  8. canvas addHitRegion()

    CanvasRenderingContext2D.addHitRegion() 是 Canvas 2D API 给位图添加点击区域的方法. 但是 mobile 都不兼容

  9. 交换机配置——跨交换机划分VLAN配置

    一.实验要求:实现跨交换地划分vlan的配置任务,使同一vlan下的主机能相互通讯 二.拓扑图如下; 三.具体实验步骤: S1交换机配置: S1>enable  --进入特权模式S1#confi ...

  10. BOM基础笔记

    BOM基础 BOM对浏览器的一些操作 1.打开.关闭窗口 •open –蓝色理想运行代码功能 window.open('http://www.baidu.com/', '_self'); <!d ...