游戏声效知多少 - Unity

0x00

音效真的很重要,好的背景音乐环境音效甚至可以当作 dlc 卖(误

(虽然我在做 gamejam 的时候基本都不会考虑声音,玩游戏的时候,也完全可以不开声音……

(请让我水一篇

0x01 Unity AudioSource

在使用 Unity 引擎自建的音频系统,可以快速地加入声效与背景音乐元素。在 Unity Auido 部分,是仿照现实生活中我们听到声音的情形实现的,“我们”自己是声音的接收者,接受来自“声源”的声音,并会受到距离等一系列环境参数的影响。我们在游戏中用来接收声音的对象会挂载一个 Audio Listener 组件,一般一个场景中只有一个 Audio Listener,会挂载在主摄像机上;而声源对象则挂载一个 Audio Source 组件,

  • AudioListener

  • AudioSource 主要可以用来设置循环播放,设置声音音量,音高等。配合 DOTween 插件,也可使非常简单地实现简便音高音量的效果,但是对于不同音频文件的拼接,就无能为力了。

  • AudioMixer 可以将多个 Audio Source 音源进行混音和路由设定。

Unity 中支持的声音格式有:

  • AIFF 声效
  • WAV 声效
  • MP3 音乐
  • Ogg 音乐

在场景中,音频文件会作为 Audio Clip 资源使用。

Unity 也支持导入计算机音乐文件(Tracker modules),格式为 .xm,.mod,.it,.s3m。

Unity Microphone 类可以创建一个 Audio Clip 并进行录音。

0x02 中间件

在很多游戏中,为了达到更好互动性,可以使用成熟的音频引擎中间件达到目标,如 Wwise,FMod 等。

前几天短暂接触了 Wwise,不仅可以配合 Unity 使用,同样可以和虚幻等引擎配合使用。在对声音表现上有较高要求,突出游戏音乐的互动性时,制作互动音乐,让音乐能够配合玩家的操作进行互动,达到不同风格的背景音乐的无缝衔接。

我按照这个教程尝试了最基础的部分,至于更高级的一些功能,比如 3d 游戏中常用到的音频技术,待后面研究再来填坑。

Wwise 使用自己的工程文件面向音效师进行音效开发,并导出基于事件的 .bank 文件在游戏引擎中使用,声音效果可以在音频工程中制作,将音频工作流与游戏引擎进行了拆分。

这种拆分必然是好的,对于很多要进行合作开发的场景,如果只是导入原始文件,对于游戏逻辑开发是一件很可怕的事。对于美术资源也是一样,不知道大型项目中,对于美术资源提交有没什么规范,希望以后能看到这部分的资料吧,转管理了?啧啧。

在 Wwise 中声音工程的部分,可以针对音效音乐进行基于节拍的控制,而在 Unity 中目前看来,只有根据时间控制一途,要实现平滑的背景音乐的切换相比 Wwise 应该是更为困难。下面是几种互动音乐的设计理念:

  1. 分层(Layering)

将音乐中分成不同乐器组,各自控制播放逻辑,在不同的情况下加入或移除某些乐器组。比如实现昼夜变化时背景音乐的变化,可以是同一乐曲使用了不同的乐器演奏的版本变化。这种设计的好处是可以即时地根据玩家节奏进行反馈,但同时播放多轨音源,会增大系统占用的资源,并且要完成这种分层设计,对音乐乐器组合本身的变化性上有所降低,音乐的表现上的变化就会减少,牺牲了音乐的发展性。

  1. 分支(Branching)

在切换不同场景时,体现不同场景的独特风格,采用不同的音乐,而为了让不同场景的音乐能够完美衔接,往往需要音乐上具有独特的设计,有时风格差异较大,还需要单独设计音乐的转接段落。分支就是在玩家切换不同场景时,音乐产生的互动变化。这种设计可以让游戏整体音乐浑然一体,但往往不能立即进行响应,需要在特定乐段,小节结束时,再触发切换到另一个分支乐段上去。这种设计也适合在配合剧情变化、情绪变化等的场景、 Boss 战中。

  1. 随机(Random)

在音乐中加入随机可以避免长时间处于同一场景产生的审美疲劳。可以配合分层设计,在每种乐器组中,预设多种音源,动态进行随机选择播放。

  1. 加花(Stinger)

配合一些操作,对音乐进行修饰,可以是即时性的“音乐性的音效”,也可以是配合音乐节拍的修饰。往往用在需要对玩家进行提醒的场合,或者玩家处于特殊状态的时候。

  1. 实时处理(Dynamic Processing)

使用滤波器,加入混响,做成 3D 音效等等,增加声效的变化。

参考:互动音乐物种常用设计理念