第五十七章 Unity 混音器

news2024/11/20 20:27:41

本章节我们介绍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 update
    void Start()
    {
        // 获取跑步声音源组件
        audioSource = effectGameObject.GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人大李崇轩:我的生成模型修炼之路丨智源大会嘉宾风采

导读 AIGC的飞速发展离不开生成模型、深度学习以及多模态学习等领域研究的不断累积&#xff0c;其中生成模型的原理与算法发展是不可或缺的一部分&#xff0c;如&#xff1a;生成对抗网络 GAN 及其一系列变体、变分自编码器 VAE 及其一系列变体、自回归模型 AR、流模型 FLOW &a…

考虑多能负荷不确定性的区域综合能源系统鲁棒规划(MatlabPython代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Interiorai: 室内设计工具平台

【产品介绍】 Interiorai是一个可以让用户从自己的房间照片中生成不同风格的室内设计的在线平台。用户只需上传一张房间的照片&#xff0c;选择想要的设计风格和模式&#xff0c;就可以看到AI生成的室内设计效果&#xff0c;并且可以下载或分享。帮助用户快速找到装修或改造房间…

即时聊天app开发-即时通讯app开发方案分析

如今&#xff0c;即时聊天APP层出不穷&#xff0c;它已经成为人们日常生活中密不可分的社交工具。如今&#xff0c;即时聊天APP不仅是聊天工具&#xff0c;也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要&#xff0c;用户可以直接点击广告了解详情。即时…

五、云对象存储以及课程分类管理模块

本项目的存储图片和音频文件都存储在腾讯云的服务器中&#xff0c;本章先介绍存储图片的方式。 存储桶文件创建&#xff1a; 存储桶项目存储内容&#xff1a; APPID和密钥管理&#xff1a; APPID和密钥是整个云存储最为重要的验证依据&#xff0c;在配置文件中应用。 现在简要…

超大规模数据库集群保稳系列之一:高可用系统

总第560篇 2023年 第012篇 基于过去多年在大规模数据集群保稳方面的实践经验&#xff0c;我们希望能够跟业界进行一些技术交流&#xff0c;美团技术团队举办了第75期技术沙龙。我们邀请到了美团研究员赵应钢担任出品人&#xff0c;同时请邀请到张洪、王占全、蔺瑞超、沈裕锋等4…

【Linux】进程信号(上)

文章目录 1.信号概念理解信号产生信号保存信号处理 2. 信号的产生证明输入 CTRL C 就是向前台进程发送信号signal 函数内部参数传递的理解对于信号自定义动作的捕捉问题 3.信号产生的方式1.从键盘输入2.使用系统调用向进程发送信号killraiseabort 3.由软件条件产生信号 1.信号概…

轻博客Plume的搭建

什么是 Plume &#xff1f; Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的&#xff0c;带有 Rocket 框架&#xff0c;以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为&#xff1a; https://plume.laosu.ml…

Map和WeakMap对象的用法(JS)

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 &#x1f338;Mapkey创建map的其他方式Map常用方法Map结构原生提供三个遍历…

项目成本管理

定义&#xff1a;项目各个成本的总和 作用&#xff1a;在预算范围内完成项目 考点&#xff1a; 直接成本是指一个由项目组承担的费用&#xff0c;例如员工的工资&#xff0c;电脑等硬件费用。 间接成本是指由多个项目组承担的费用&#xff0c;例如租金&#xff0c;水电费&am…

社交媒体中的“点赞”“喜欢”是如何存储在数据库中的?

你有没有想过 Instagram、Twitter、Facebook 或任何社交媒体平台如何跟踪谁喜欢你的帖子&#xff1f;让我们在这篇文章中弄清楚&#xff01; 1&#xff1a;序言 最近&#xff0c;我受邀在一个名为“CityJS”的活动中发言。但问题在于&#xff1a;我是 PHP 开发人员。我根本不懂…

Palo Alto Networks利用基于机器学习的自动化网络安全解决方案

“ Palo Alto Networks利用第三代英特尔至强可扩展处理器和部署在云中的英特尔软件&#xff0c;为其云端安全服务提供强有力的支持&#xff0c;从而提升机器学习和推断的性能。 面对恶意软件攻击的快速演变和难以捉摸的特性&#xff0c;企业网络安全团队面临着巨大的挑战。恶意…

"五步走"的MES系统改进战略,让ERP不再是面子工程

随着制造业信息化进程的不断推进&#xff0c;大部分的制造业企业都开始意识到&#xff0c;生产技术的领先和生产流程的有效管理是其发展的重要一环&#xff0c;有些企业已经或者正在实施的 ERP系统。但是&#xff0c;从相关部门的数据来看&#xff0c; ERP在分散型制造业企业中…

算法(一)—— 回溯(1)

文章目录 前言1 77 组合2 77 组合优化 前言 1、回溯法解决的问题都可以抽象为树形结构&#xff08;N叉树&#xff09;&#xff0c;使用树形结构来理解回溯。 2、回溯法解决的都是在集合中递归查找子集&#xff0c;集合的大小就构成了树的宽度&#xff0c;递归的深度&#xff…

FPGA基于GS2971/GS2972实现SDI视频收发 提供工程源码和技术支持

目录 1、前言2、我目前已有的SDI编解码方案3、GS2971/GS2972芯片解读GS2971解读GS2972解读 4、详细设计方案5、vivado工程1解读硬件逻辑工程软件SDK工程 6、vivado工程2解读硬件逻辑工程软件SDK工程 7、上板调试验证8、福利&#xff1a;工程代码的获取 1、前言 FPGA实现SDI视频…

多尺度深度特征(上):多尺度特征学习才是目标检测精髓(干货满满,建议收藏)...

计算机视觉研究院专栏 作者&#xff1a;Edison_G 深度特征学习方案将重点从具有细节的具体特征转移到具有语义信息的抽象特征。它通过构建多尺度深度特征学习网络 (MDFN) 不仅考虑单个对象和局部上下文&#xff0c;还考虑它们之间的关系。 公众号ID&#xff5c;ComputerVisionG…

零售行业公有云信息安全探讨

新钛云服已累计为您分享744篇技术干货 ⚠️公有云安全事件⚠️ 最近小半年接连处理了几起零售行业公有云安全事件&#xff0c;都是因为某种原因造成的数据泄露。有防护措施不当的&#xff0c;也有因为应用漏洞泄露被黑的&#xff0c;也有内部人员不慎造成的。 事后总结发现主要…

第一章 IRIS 基础知识:使用互操作性制作连接系统

文章目录 第一章 IRIS 基础知识&#xff1a;使用互操作性制作连接系统为什么要连接系统&#xff1f;介绍Productions 第一章 IRIS 基础知识&#xff1a;使用互操作性制作连接系统 本文介绍了如何将系统与 IRIS 数据平台互操作性产品连接在一起。 为什么要连接系统&#xff1f…

Golang每日一练(leetDay0063) 最大数、重复的DNA序列

目录 179. 最大数 Largest Number &#x1f31f;&#x1f31f; 187. 重复的DNA序列 Repeated DNA Sequences &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

博客管理系统--博客列表页

准备工作设计数据库封装数据库操作创建实体类数据库增删查改操作&#xff08;写法几乎很相似&#xff09;前后端交互 准备工作 博客管理系统前端部分在学习前端、css、js部分实现&#xff1b;现在我们将完成后端工作;并且部署云服务上&#xff1b;使其能让所有联网的人使用。 …