本章节我们介绍Unity 混音器 (Audio Mixer),它允许我们混合各种音频源,并对音频源进行统一控制或应用各种效果。在Unity中混音器是一种资源文件,可以右键Create创建AudioMixer文件。虽然它是一个文件,但是Unity提供了图形化界面来编辑这个文件。场景中的声音有很多,我们需要将他们分类管理,例如背景音乐,特效声音,NPC声音等等。这些声音都可以放入一个或多个AudioMixer中管理。每个AudioMixer都有类定义的层次结构,这在AudioMixer中被称为AudioGroup。我们只需要将我们的音频源按照不同的分类输出到AudioGroup上就可以了,剩下的就是我们通过AudioGroup来操作这些音频源的播放控制。

接下来,我们使用实例来说明如何使用混音器 (Audio Mixer)。首先,我们将场景中的声音分为两种,一种是背景声音(比如,上面夜晚虫鸣的声音night.mp3),一种是特效声音(比如,玩家跑步的声音run.mp3)。我们要实现的效果就是,场景默认播放夜晚虫鸣的背景声音,然后按下空格键后播放玩家跑步声音,同时减低背景声音。

接下来,我们就来创建一个混音器资源文件。我们在Project窗口下的Asset目录空白处右击,选择“Create”->“Audio Mixer”,文件的名称就是“NewAudioMixer”即可。

然后我们双击这个文件,打开它的图形化编辑窗口。

在上图中,我们在左边看到“Groups”的分组,下面有一个“Master”的主分组,同时在右侧也能看到这个名称为“Master”的主分组。接下来,我们点击选中这个“Master”,然后点击“Groups”右边的加号,添加两个新的分组:BgSound和EffectSound

请注意,Master是主分组,而BgSound和EffectSound是其下的两个子分组。同时,在右侧我们就能看到新增加的两个子分组。也就是说,Master可以整体的控制BgSound和EffectSound。而BgSound和EffectSound又可以控制各自的声音。接下来,我们介绍右侧的三个Master,BgSound和EffectSound。我们发现,这个三个分组的操作界面都是一样的。在这个操作界面中,最醒目的就是音量刻度以及滑块,很明显,这个滑块就是用来控制声音的大小的。从刻度中,我们发现声音的最大值为0,最小值为-80,单位是dB(分贝)。接下来就是“S”“M”和“B”三个按钮。S 按钮代表改组的声音播放,其他组的声音全部静音。M 按钮代表该组的声音全部静音。B 按钮代表取消该组中的所有效果。最下面的“Add”按钮就是给当前分组添加一个效果的,这里就不做详细介绍。

如何使用混音器来控制声音大小呢?我们需要将混音器的音量参数(Volume)暴露(Expose)出来,这样我们才可以使用代码来控制声音的大小。当然,我们还可以暴露其他参数来通过代码控制其实对应的效果。如何暴露音量参数呢?首先,我们点击“BgSound”这个分组,然后查看其Inspector检视面板,如下所示

我们能够看到它的音量参数“Volume”了。我们将鼠标放到“Volume”的上面右击

我们选择第一个选项“Expose ‘Volume(of BgSound)’ to script”,意思就是将这个参数暴露给脚本。

暴露完毕后,就可以看到原来“Volume”的右边多了一个箭头的标识。同时,在我们的混音器编辑窗口中的右上角也会显示暴露参数的个数,如下所示

我们点击右上角的下拉三角,如下所示

显示我们暴露的参数名称为“MyExposedParam”,我们可以改个名称,我们右击这个名称

然后选择“Rename”重命名,输入新的名称“BgSoundVolume”

我们以同样的方式来暴露“EffectSound”中的Volume参数为“EffectSoundVolume”。

这里,我们就暂且设置完毕混音器文件了。

我们回到场景中Audio Source组件。我们已经向场景中添加了一个空物体( 重命名为BgGameObject ),并为该空物体添加了Audio Source组件,该组件中的第一个选项Audio Clip也分配了“night.mp3”声音文件。然后我们注意第二个Output选项。它就是用来设置混音器 (Audio Mixer)的。

接下来,我们就来点击Output选项右侧的圆点来添加我们刚刚创建的混音器。

在弹出的对话框中,我们选择“BgSound”这个子分组。因为我们的“night.mp3”声音文件属于背景声音,所以我们将其交给“BgSound”来管理。

同理,我们继续添加一个新的空物体(名称为EffectGameObject),同样添加Audio Source组件,然后第一个选项Audio Clip分配“run.mp3”声音文件,第二个Output选项设置“EffectSound”分组。

这里,我们取消了“Play On Awake”选项,不让“run.mp3”声音自动播放。接下来,我们需要创建脚本文件SoundController.cs来实现我们刚刚说的效果。代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;public class SoundController : MonoBehaviour
{// 混音器public AudioMixer audioMixer;// 跑步声音源组件public GameObject effectGameObject;private AudioSource audioSource;// Start is called before the first frame updatevoid Start(){// 获取跑步声音源组件audioSource = effectGameObject.GetComponent<AudioSource>();}// Update is called once per framevoid Update(){// 空格按下,播放跑步声音,减低背景声音if (Input.GetKeyDown(KeyCode.Space)){audioMixer.SetFloat("BgSoundVolume", -20.0f);audioMixer.SetFloat("EffectSoundVolume", 0.0f);audioSource.Play();}// 空格按上,停止跑步声音,恢复背景声音if (Input.GetKeyUp(KeyCode.Space)){audioMixer.SetFloat("BgSoundVolume", 0.0f);audioMixer.SetFloat("EffectSoundVolume", -80.0f);audioSource.Stop();}}
}

然后,我们将这个脚本附加到主相机“Main Camera”上面。

在脚本中我们定义了两个公开(public)的变量,一个是混音器audioMixer,另一个是空物体effectGameObject。这两个变量的初始化,我们需要在检视面板中拖拽完成。我们分别从Project的Asset窗口中,将我们的混音器文件NewAudioMixer拖拽到audioMixer变量位置,然后从层次面板中拖拽effectGameObject游戏对象到effectGameObject变量中。

如上截图中所示那样。audioMixer变量就是混音器,我们可以调用它的SetFloat方法来设置声音的大小。还记得我们暴露的两个参数嘛?他们分别是背景声音变量BgSoundVolume以及特效声音变量EffectSoundVolume。我们的SetFloat方法的第一个参数就是暴露参数变量的名称,第二个参数就是参数值。0代表最大音量,-80代表最小。当我们按下空格键的时候,我们就可以通过如下代码:

audioMixer.SetFloat("BgSoundVolume",-20.0f);
audioMixer.SetFloat("EffectSoundVolume", 0.0f);

来降低背景声音,同时增大特效声音。那么另一个effectGameObject游戏对象是干嘛的呢?它其实是为了获取音频源audioSource控件。因为我们将跑步声音“run.mp3”就放置到了effectGameObject游戏对象的audioSource控件上面。因此该音频源的播放就需要使用audioSource控件来实现。这个就比较简单了,直接调用Play方法播放,Stop方法停止。接下来,我们就可以运行整个工程,场景会自动播放背景声音night.mp3文件,当我们按下空格的时候,背景声音会降低,同时播放跑步特效声音run.mp3文件。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

第五十七章 Unity 混音器相关推荐

  1. 第五十七章 Caché 函数大全 $REPLACE 函数

    文章目录 第五十七章 Caché 函数大全 $REPLACE 函数 大纲 参数 描述 REPLACE和REPLACE和REPLACE和TRANSLATE 示例 第五十七章 Caché 函数大全 $RE ...

  2. 韦东山 IMX6ULL和正点原子_正点原子Linux第五十七章Linux MISC驱动实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第五十七章Linux MISC驱动实验 misc的意思是 ...

  3. 【正点原子STM32连载】第五十七章 USB读卡器(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  4. 第五十七章 SQL函数 $FIND

    文章目录 第五十七章 SQL函数 $FIND 大纲 参数 描述 $FIND, POSITION, CHARINDEX, INSTR 示例 第五十七章 SQL函数 $FIND 字符串函数,返回字符串中子 ...

  5. 不朽凡人 正文 第四百五十七章 冲击天仙

    "没错,这就是中品仙晶,你可以借助这些中品仙晶冲击天仙境界."寒青茹答道. 莫无忌欣喜的说道,"青茹师姐,我现在要修炼准备冲击天仙境,你在这里凝聚仙格." &q ...

  6. 山海演武传·黄道·第一卷 雏龙惊蛰 第十五 ~ 十七章 紫气凌霄再生龙

    相传混沌初开,阴阳始列,分鸿蒙为清浊二气.轻清上浮者为天,质阳也.重浊下凝者为地,质阴也.清浊相混者为人,质兼有也.两气卓然独立,互不示下,各生一山相抗,以分清浊,以擎寰宇. 清气所凝者,至清至阳,无 ...

  7. 第十七章 Unity 预制件prefab(下)

    本章节我们来讲解如何编辑预制体文件.这里介绍三种打开编辑预制件的方式.第一就是通过预制件的实例游戏对象的Inspector检视面板上面的预制件"打开"按钮. 第二就是在Projec ...

  8. 老子《道德经》第五十七章

    江海所以能为百谷王者,以其善下之,故能为百谷王. 是以欲上民,必以言下之:欲先民,必以身后之. 是以圣人处上而民不重,处前而民不害,是以天下乐推而不厌. 以其不争,故天下莫能与之争. 天下皆谓我道大似 ...

  9. 第二十七章:五姓七望

    第二十七章:五姓七望 现在皇宫外面送给李丽质的东西已经不少了,甚至已经相当的多了,都已经在屋内堆满了.不过李丽质还是继续堆着,因为李丽质知道,现在民心已经开始向着自己转变了. 他还时不时的想着,这李淳 ...

最新文章

  1. Magazine App Demo
  2. SQL Server中的GAM页和SGAM页
  3. Git学习系列之Windows上安装Git之后的一些配置(图文详解)
  4. 最长重复子串(Rabin-Karp算法)
  5. 分布式 RPC架构简单理解
  6. PMP敏捷图表之价值流程图
  7. 大学生经验丨帮助应届生、年轻程序员快速成长的 12 个锦囊妙计!
  8. 95-134-114-源码-维表-Hbase维表关联:LRU策略
  9. Day27:threading模块
  10. Xv6 编写用户程序
  11. java 生成pdf 下载_java生成PDF,并下载到本地
  12. 干货 | Python之自动化报表
  13. 16进制颜色码对照表
  14. layui layer 自定义皮肤真香警告
  15. 高通平台 pmic—gpio修改(一)
  16. 孙鑫老师的程序员之家
  17. Java语言 随机点名程序
  18. uni-app实现仿微信前端(二)
  19. NRF24L01+双向通信
  20. Mendix for Manufacturing Industries指南

热门文章

  1. sqlzoo刷题——SUM and COUNT(聚合函数)
  2. “六项挑战、一个核心、三段步骤” —— 未来工厂建设的精华回顾
  3. 南航华为俱乐部组织参加华为公司open day活动
  4. java url安全的base64编码_URL安全的Base64编码
  5. focus-within switch tab
  6. ajax导致csrf验证失败的解决方法
  7. Android EventLog简介
  8. Git详解:Git内部原理
  9. 你要的职场“摸鱼”神器来了!(文末送书)
  10. HangMan 猜单词 一个简易的吊死鬼游戏 python版