Unity的音频系统-Audio

音乐也是游戏开发中必不可少的一环,虽然平时在学习过程中写的一些Demo项目可能会有所忽略,但在正式发行的游戏中,音乐肯定是至关重要的。音乐是游戏与玩家交互的重要途径,使玩家更能沉浸于游戏之中。这篇文章介绍一下Unity的音频系统。

Unity的音频系统发展到现在已经比较完善,支持的功能包括全3D音效,实时混音,母带制作,混音器,快照,预定义效果等等。
嘛,说实在的,对于一个不懂音乐的人来说,这些概念真的是晦涩难懂,根本不清楚是什么,有啥用。所以还是搜了一些资料,先了解一下音乐方面的知识。

  • 混音:Audio Mixing,是音乐制作中的一个步骤,常常也会缩写成MIX。是把多种来源的声音,整合至一个立体音轨(Stereo)或单音音轨(Mono)中。
  • 母带:歌手在创作歌曲、选歌并练习完毕后,正式在录音棚原始录制的、经过编辑完毕的磁带(光盘),以用于复制、生产制作音像制品。

唔,以上概念来自百度百科。虽然大致了解了一些概念,但感觉这对游戏里面使用音乐的用处不大呢。大概是我Level不够吧。还是抛开那些音乐方面的专业知识吧,先弄一下基础游戏音频。

支持的音频格式:

格式 后缀
MPEG layer 3 .mp3
Ogg Vorbis .ogg
Microsoft Wave .wav
Audio Interchange File Format .aiff/.aif
Ultimate Soundtracker module .mod
Impulse Tracker module .it
Scream Tracker module .s3m
FastTracker 2 module .xm

AudioManager

音频管理器,通过Edti->Project Settings->Audio可以打开。这里可以配置整个游戏的音频属性。

  • Global Volume,全局播放的音量;
  • Volume Rolloff Scale,衰减因子,越大,声音衰减越快;
  • Doppler Factor,多普勒因子,模拟多普勒效应的监听效。0,关闭;1,高速物体的多普勒效应会比较明显的监听的到;
  • Default Speak Mode,设置扬声器模式;默认值为2(立体声, AudioSpeakModer);
  • System Sample Rate,输出采样率;
  • DSP Buffer Size,调整DSP缓冲区大小优化延迟和性能,越大效果越好;
  • Max Virutal/Real Voices,同时播放的真实声音的数量;虚拟的声音最后会和其他的声音混合在一起,所以比真实的声音多;
  • Disable Unity Audio,是否使用音频;
  • Virtualize Effects,虚拟特效。

Audio Source

音频源会在场景中播放音频片段。可以按照以下步骤创建一个音频源:

  1. 导入音频文件到工程中,会自动转换成Audio Clip;
  2. 创建一个空对象,用作音频源的载体;
  3. 在空对象上创建Audio Source;
  4. 为Audio Source添加Audio Clip。

相关属性:

  • AudioClip,被播放的音频片段;
  • Output,声音可以通过音频监听器或音频混合器输出;
  • Mute,是否静音;
  • Bypass Effects,是否打开“旁路”特效;
  • Bypass Listener Effects,“旁路”特效监听器;
  • Bypass Reverb Zones,“旁路”混响;
  • Play On Awake,唤醒时是否播放;
  • Loop,是否循环播放;
  • Priority,播放的优先级;
  • Volume,音量大小;
  • Picth,音频播放速度对音高的影响;
  • Stereo Pan,声道,0,偏向左声道;1,偏向右声道;
  • Spatial Blend,空间混合,0为2D音效,1为3D音,2D音效不会做衰减;
  • Reverb Zone Mix

Audio Clip

当我们导入音乐到Unity中时,音乐文件会自动转换成Audio Clip对象。Audio Clip即可直接在Audio Source中使用了。

Audio Listener

Audio Listener类似于一个麦克风设备,它接收该场景下的所有音频输入并通过计算机的麦克风输出。每个场景有且只能有一个Audio Listener,默认绑定在MainCamera上。

一个简单的音频播放实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Start () {
audioSource = GetComponent<AudioSource>();
}
void Update () {
// 播放背景音乐
if (Input.GetMouseButtonDown(0)) {
if (audioSource.isPlaying)
{
audioSource.Pause();
}
else
{
audioSource.Play();
}
}
}
// 播放按钮点击音效
public void PlayStartSound()
{
audioSource.PlayOneShot(audioClip);
}