Unity的AudioSystem给我们提供了一整套的游戏音频处理解决方案,接下来我们对Unity Audio System进行简单的讲解。首先让我们来了解一下Unity Audio System包含了哪些重要的组成部分。
Audio Clip:这个是Unity存放外部音频资源的容器,可以根据我们的需要将外部导入的音频资源进行粗处理。比如在LoadType选项中我们就可以选择加载进来的类型是压缩还是未压缩。关于更多LoadType和Compression Format的信息参考:【内存优化】Unity音频资源优化
Audio Source:顾名思义,音频源,就是拿来播放音频的组件,Audio Source用来在场景中播放Audio Clip。如果说Audio Clip是Asset类型的话,那么Audio Source就是组件,他可以挂载到Gameobject上。Audio Source所挂载到Gameobject的位置会影响到最后播放的效果,比如如果Audio Source的空间混合类型为3D那么其挂载的Gameobject在场景中的位置将会遵循显示生活中的近大远小,同时左右声道音量的大小也会受到影响,使其听起来具有空间感。
需要注意的是,Audio Source不一定要分配一个Audio Clip,在运行时动态分配Audio Clip也是可行的,同时Audio Source还提供了一些静态方法能够让我们很方便的播放Audio Clip。更多关于Audio Source的信息参考官方文档:Audio Source
Audio Listener:这个组件一般被挂载在摄像机上,这个组件就是间接或直接接受我们场景世界中的声音的组件,如果没有这个组件那么我们将“听不见”场景中的任何声音。
在Audio Source的Output选项中,如果没有选择任何的AudioMixerGroup,那么Audio Source播放的Audio Clip将直接给到Audio Listener。
上面我们介绍了三个最基本的部分,Audio Clip、Audio Source、Audio Listener,可以比作唱片、播放器、和听众,有了这三个部分我们就可以有最简单的游戏音效了。但是当我们的需求变得复杂和灵活了的时候,往往这三个最基本的部分是不能满足我们的需要了,比如我们想要声音能够根据环境来添加混响效果时,或者我们想要在不同的音乐之间丝滑切换,这个时候我们就需要Audio Mixer的介入了
Audio Mixer:Audio Mixer的作用就是对若干个音频进行分组管理和处理,在Audio Source的Output选项当中可以选择,这个Audio Source是归那个Audio Mixer Group管的,Audio Mixer有个单独的窗口可以在Window -> Audio -> Audio Mixer下打开。
Audio Mixer窗口大致可以分为左右两个部分,我们从左边的部分挨个介绍,首先是Mixers。
Mixers:就是混合器,点击加号我们就可以新建一个Audio Mixer。每一个Audio Mixer都可以有不同的组和设置不同的效果。
Snapshots:快照,怎么理解Snapshot快照呢,可以把Snapshot看做是一个便利贴,这个便利贴上记录了当前这个Mixer的设置的一些效果,当我们想要一种效果的时候,我们就按照这个便利贴即snapshot上记录的设置来播放声音,一个Mixer可以有很多个Snapshot即可以有很多种效果,比如玩家在陆地上和在水中的音效是不一样的,这个时候我们就可以通过在记录了陆地上音效设置的snapshot和记录了水下音效设置的snapshot之间切换来实现音效的切换。
Group:组,可以理解为是音源组,我们在Audio Source中的Output中选择的就是这个Group,具体点讲,是先选择属于那个Mixer,然后再是属于这个Mixer下的那个Group,当我们添加一个组的时候我们就可以看到,面板右边同时多出了一个控制器,这个多出的控制器就是当前这个新添加的Group的。
View:额,这个应该没什么大作用,就是拿来方便开发者分类的吧。
现在让我们来具体看看面板右边的部分,这个部分很直观的展示了当前Mixer中有哪些Group,Master是所有Group的总控制器,对master添加的效果会影响到所有的Group,针对每个单独的Group都可以点击右下角的Add添加Audio Effect,添加的effect会作用到所有输出到这个Group的Audio Source,也就是在output选项中选择了当前Mixer Group的Audio Source。当我们不想要某一个效果的影响时,Snapshot的作用就显现出来了,我们可以新建一个Snapshot,然后将这个Snapshot的Group的effect参数设置为需要的值,这样我们就可以通过在不同的Snapshot之间切换来达到切换不同效果的目的。
以上就是Audio Mixer的一个最粗浅的介绍。
Audio Reverb Zone:混响区域组件,顾名思义,这个组件的作用就是定义一片区域拥有的混响效果,当我们的Audio Listener处于这片区域时就会有对应的混响效果。
这片区域是一个球形区域,如果Audio Listener处于MinDistance中那么混响效果最强,如果处于MinDistance和MaxDistance之间,那么混响效果会根据距离进行衰减,在MaxDistance之外则不会有任何的混响效果。ReverbPreset提供了一些混响的预设,我们也可以自定义预设。
还有很多的滤波器组件,这些组件可以对音频进行波形的处理,这里不做展开介绍,详细信息见官方文档Audio Filters
关于如何在unity中构建一个灵活强大的Audio System,可以看这个视频如何使用Scriptable Object构建一个Audio System。
Audio System | Scriptable Object | 声音系统 | Unity开放项目