Unity可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情,但是为了模拟现实直接中的各种声音效果,Unity会提供各种各样的组件来实现。
首先,我们需要了解“多普勒效应”。他是一名奥地物理学家多普勒发现的一种声音现象。当火车从远而近时汽笛声变大,但波长变短,而火车从近而远时汽笛声变小,但波长变长。这是由于发声源(波源)与收听者之间存在着相对运动。在现实中,声源和收听者的位置移动是非常普遍的。
Unity为了模拟“多普勒效应”,就需要模拟“声源”和“收听者”这两个能够移动的角色。很明显,这两个角色在场景中都应该是游戏对象,因为只有游戏对象才可以进行位置移动变化。但是,最终这个效果还是需要通过控件来实现的。Unity要求“声源” 来自附加到游戏对象的音频源 (Audio Source)组件,发出的声音由附加到另一个游戏对象(通常是主摄像机)上的音频监听器 (Audio Listener)组件获取。然后就可以利用两个游戏对象之间的距离和位置的影响,播放声音给最终用户听。此外还使用音频源对象和音频监听器对象的相对速度来模拟多普勒效应以增加真实感。注意,音频源对象可以是多个,但音频监听器只有一个。
此外,周围环境也会影响声音的反射方式,因此洞穴内的声音会产生回声,但相同的声音在露天环境中却不会产生回声。Unity 无法仅根据场景几何体来计算回声,但您可以通过向对象添加音频回声滤波器 (Audio Echo Filter)组件来模拟回声。Unity提供了很多音频滤波器来实现各种各样的效果。如下所示:
1.音频低通滤波器 (Audio Low Pass Filter)
2.音频高通滤波器 (Audio High Pass Filter)
3.音频回声滤波器 (Audio Echo Filter)
4.音频失真滤波器 (Audio Distortion Filter)
5.音频混响滤波器 (Audio Reverb Filter)
6.音频合声滤波器 (Audio Chorus Filter)
接下来,我们使用案例来介绍如何播放声音。unity支持的音乐文件格式有很多,一般背景音乐建议使用.mp3与.ogg,而音效则可以使用.aiff。Unity官方推荐,对于较短的音乐可以使用未经压缩的wav,aiff格式。对于较长的音乐,建议使用压缩的ogg voris, mp3格式。播放声音涉及到的音频源 (Audio Source)组件和音频监听器 (Audio Listener)组件。
我们首先创建一个新的“SampleScene2.unity”场景。接下来,我们就创建一个空游戏对象,菜单栏点击“GameObject”->“Create Empty”来创建。空对象在Scene场景中是看不到的。
一个空游戏对象只有“Transform”组件,我们给这个空物体添加Audio Source组件。
添加Audio Source组件后,我们就可以在Scene场景中看到一个小喇叭的物体。我们再来查看它的Inspector检视面板,如下所示
音频源 (Audio Source) 组件在场景中播放音频剪辑。剪辑的音源可通过音频监听器或者混音器播放。音频源可播放任何类型的音频剪辑,可设置以 2D、3D 或混合模式播放。音频可在扬声器之间扩散,并在 3D 和 2D 之间变换。可通衰减曲线控制传播距离。此外,如果监听器位于一个或多个混响区内,则会将混响应用于音频源。可对每个音频源应用单独的滤波器,以获得更丰富的音频体验。接下来,我们就来介绍这个组件的常用属性。
Audio Clip 参考将要播放的声音剪辑文件。我们可以直接将音频文件拖拽到该选项。
Output默认情况下,剪辑将直接输出到场景中的音频监听器 (Audio Listener)。使用此属性可以更改为将剪辑输出到混音器 (Audio Mixer)。
Mute如果启用此选项,则为静音。默认不开启此项。
Bypass Effects 启用/停用音频源的滤波器效果。默认启用。
Bypass Listener Effects 启用/停用所有监听器。默认启用。
Bypass Reverb Zones 启用/停用所有混响区。默认启用。
Play On Awake 如果启用此选项,声音将在场景启动时开始播放。如果禁用此选项,需要通过脚本使用 Play() 命令启用播放。
Loop 是否循环播放。默认不循环播放,也就是只播放一次。
Priority 从场景中存在的所有音频源中确定此音频源的优先级。(Priority值为0 表示优先级最高。值为256, 表示优先级最低。默认值为 128)。
Volume 声音的大小与音频监听器的距离成正比,以米为世界单位。
Pitch 由于音频剪辑的减速/加速导致的音高变化量。值 1 表示正常播放速度。
Stereo Pan 设置 2D 声音的立体声位置。
Spatial Blend 设置 3D 引擎对音频源的影响程度。
Reverb Zone Mix 设置路由到混响区的输出信号量。
3D Sound Settings 3D声音的设置
Doppler Level 确定将对此音频源应用多普勒效果的程度,0表示不使用。
Spread 在发声空间中将扩散角度设置为 3D 立体声或多声道。
Volume Rolloff 声音衰减的方式。Logarithmic Rolloff 靠近音频源时,声音很大,但离开对象时,声音降低得非常快。
Min Distance 在 MinDistance 内,声音将保持可能的最大响度。在 MinDistance 之外,声音将开始减弱。
Max Distance 声音停止衰减的距离。超过此距离之后,声音将保持与监听器之间距离 MaxDistance 单位时的音量,不再衰减。
接下来,我们将一个音频文件“night.mp3”放入到Asset目录下,音频记录夜晚虫鸣的背景声音。当然,我们还提供了其他的一些声音文件。
然后,我们需要将这个“night.mp3”文件拖拽到Audio Source组件的Audio Clip选项上。
接下来,我们就需要添加音频监听器 (Audio Listener)组件。默认情况下,我们的“Main Camera”主相机游戏对象上面自动会添加该组件。
音频监听器 (Audio Listener) 充当类似于麦克风的设备。它接收来自场景中任何给定音频源的输入,并通过计算机扬声器播放声音。对于大多数应用程序,最有意义的是将监听器附加到主摄像机。音频监听器没有属性。但必须添加音频监听器才能工作。默认情况下,音频监听器将被添加到主摄像机。请注意,每个场景只能有 1 个音频监听器才能正常工作。接下来,我们运行整个工程,查看是否有声音。由于截图无法展示声音,所以我们就不展示了。
备注:AudioSource和 Audio Listener都可以使用play方法播放声音。AudioSource控制的是场景中一个声音文件的播放,而Audio Listener则可以控制场景中所有声音的播放。毕竟在一个场景中,可以存在多个AudioSource组件,但是只有一个Audio Listener组件。
本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id