前言

在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击、爆炸之类)的音量,这时我们可以用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、结束语

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

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

  1. 使用Audio Mixer分别控制音效

    前言 在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击.爆炸之类)的音量,这时我们可以用Audio Mixer来解决. 工程中用到3个音频文件作为测试,分别 ...

  2. unity 通过audio mixer 来控制音频的大小

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Aud ...

  3. Unity 3D 一个简单的角色控制脚本

    之所以写这个脚本,是因为我想起了我还是新手的时候,那时为了一个角色控制脚本百度了半天还是一无所获,因为看不懂啊,都写的太高级了 希望这个脚本能够帮助那些 像曾经的我一样迷失于代码中的新手们能够清晰的理 ...

  4. Unity 声音播放控制:Audio Mixer

    Unity播放声音时一般会使用AudioSource和AudioListener控制声音的播放,暂停和大小.在场景中AudioListener只能存在一个,当控制所有的声音都是一样的设置时只需要调用A ...

  5. Unity 3D项目 - 01 - 开始游戏主界面

    Unity 3D项目 - 01 - 开始游戏主界面 一.常用代码 0.打印调试 Debug.Log():将消息记录到 Unity 控制台.<Debug-Log - Unity 脚本 API> ...

  6. Unity 使用一张贴图来控制材质主贴图的透明度

    最近有个需求:通过一张贴图的颜色值来控制材质主贴图的透明度. 先做一个注明:用来控制主贴图透明度的贴图,我们暂且称之为"Alpha贴图":主贴图就叫"主贴图". ...

  7. 【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)

    需要源码和资源包请点赞关注收藏后评论区留言私信~~~ 上一篇博客介绍了如何搭建飞机场景.制作了飞机引擎开启喷射火焰,并且让飞机起飞了参考链接如下 飞机场景搭建 一.效果展示 其中按空格可以控制后部引擎 ...

  8. Unity 3D 中的专业“术语表”。

    这是unity手册中的内容.具体可以参考此链接:Unity 用户手册 (2019.4 LTS) - Unity 手册 目录 2D 术语 2D 物理术语 AI 术语 Analytics 术语 动画术语 ...

  9. Unity 3D学习笔记之一 界面介绍

    因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通) 一.Unity界面介绍      首先进入U ...

最新文章

  1. JQuery $post函数
  2. mysql右下角托盘中的图标_MFC下托盘图标的实现和托盘菜单。
  3. php sftp 删除,Linux中安装,卸载ftp|sftp服务
  4. 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(二)
  5. sql 精读(三) 标准 SQL 中的编号函数示例
  6. jsoup HTML parser hello world examples--转
  7. 浅谈微信小程序生命周期
  8. php检测表大小,查询mysql数据库、表的大小
  9. 我的docker随笔14:MySQL操作实例
  10. Hibernate SqlQuery
  11. 基于AI的网易UI自动化测试方案与实践
  12. 扫地机器人的人工智能与传感器
  13. pandas 列计算log不用math.log而是np.log
  14. 无线路由dns服务器地址,tplink无线路由器怎么设置DNS服务器地址
  15. 记事本开发 dos下编译java 多个类文件_通过记事本编写的java代码通过()命令运行。_学小易找答案...
  16. 软件测试拿了几个20K offer,分享一波面经
  17. 房产行业数字化转型迷思:技术能提供何种助力?
  18. 隐藏与显示桌面上的单个图标
  19. 敏捷Scrum框架最全总结!
  20. 腾讯地图实现点击搜索地址功能

热门文章

  1. 13个Tensorflow实践案例,教你入门到进阶
  2. 【Android App】实战项目之仿微信的私信和群聊App(附源码)
  3. nginx +unicorn + gollum 搭建 wiki
  4. 到底适不适合学习3D建模?这5点少1个都不行
  5. 如何解决Chrome首页被流氓网站劫持的问题
  6. C++基础:while循环
  7. 网易游戏游戏开发工程师笔试试题
  8. android studio读按行文本文件(txt)
  9. html手机扫描条形码,在HTML5/JavaScript中扫描条形码
  10. 辽宁自考计算机及应用,辽宁08年自考计算机及应用(独立本科)考试计划