Unity - 音频简介

游戏重视音频是有原因的;为游戏增加美学价值非常重要。从最早的Pong开始,人们就可以听到球交替击打挡板时发出的哔哔声和嘟嘟声。当时这是一个非常简单的短方波样本,但对于所有视频游戏的鼻祖,你还能要求什么呢?

在现实生活中,许多因素都会影响你感知声音的方式;物体的速度、它所处的场景类型以及它来自哪个方向。

有许多因素会对我们的引擎造成不必要的负载。相反,我们试图创造一个关于我们的声音如何在游戏中发挥作用的想法,并围绕这个想法进行构建。这在 3D 游戏中尤为突出,因为 3D 游戏中有 3 个轴需要处理。

在 Unity 中,我们有专门的组件用于音频感知和播放。这些组件共同作用,创造出一种可信的、让游戏感觉自然的声音系统。

Unity 为我们提供了一系列有用的工具和效果,如混响、多普勒效应、实时混音和效果等。我们将在后续章节中学习这些内容。

音频组件

在本节中,我们将学习 Unity 中与音频相关的 3 个主要组件。

AudioSource

AudioSource 组件是您将附加到 GameObject 以使其播放声音的主要组件。当通过混音器、通过代码触发或默认情况下唤醒时,它将播放 AudioClip

AudioClip 只是一个加载到 AudioSource 中的声音文件。它可以是任何标准音频文件,例如 .mp3、.wav 等。 AudioClip 本身也是一个组件。

Audio Source

AudioListener

AudioListener 是监听场景中播放的所有音频并将其传输到计算机扬声器的组件。它就像游戏的耳朵。您听到的所有音频都与此 AudioListener 的位置有关。场景中只能有一个 AudioListener 才能正常工作。默认情况下,主摄像头会连接 Listener。 Listener 没有任何设计人员需要关注的公开属性。

Audio Listener

音频过滤器

AudioSource 的输出或 AudioListener 的输入可通过音频过滤器进行修改。这些是可以更改混响、合唱、过滤等的特定组件。每个特定过滤器都带有自己的组件,并带有公开值以调整其声音。

Audio Filters

播放声音

让我们尝试制作一个单击时播放声音的按钮。首先,我们将创建一个圆形精灵,并将其设为红色。

创建圆形精灵按钮

现在,让我们将音频源附加到此精灵。

附加音频源精灵

为了让对象播放声音,我们必须为其添加声音。让我们将这个音效用于我们的目的。

http://www.orangefreesounds.com/ding-sfx/

下载音效,并将其拖到 Assets 中。

sound effect

当 Unity 将此资产作为声音文件导入时,它会自动转换为 AudioClip。因此,您可以将此声音片段从 Assets 直接拖到我们精灵的音频源中的音频片段插槽上。

AudioClip

将声音片段从 Assets 直接拖到我们精灵的音频源中的音频片段插槽上后,请记住在音频源属性中取消选择"唤醒时播放";不这样做会使声音在游戏开始时播放。

唤醒时播放

现在,让我们进入代码。创建一个名为"BellSound"的新脚本并打开它。

BellSound

由于我们的音频源是通过代码控制的,因此我们首先要获取对它的引用。我们将像以前一样使用 GetComponent 方法。

public class BellSound : MonoBehaviour {
   AudioSource mySource;
   // Use this for initialization
   void Start () {
      mySource = GetComponent<AudioSource>();
}

现在,让我们设置方法来检测被点击的对象。MonoBehaviour 为我们提供了所需的方法,名为 OnMouseDown。每当鼠标在该游戏对象的 collider 范围内点击时,都会调用该方法。

由于我们尚未将碰撞器附加到按钮上,我们现在就这样做。

attached a collider

我们不需要 Rigidbody;我们也不需要通过代码访问此碰撞器。它只需存在即可使方法正常工作。

让我们测试该方法并查看它是否有效。在脚本中编写以下代码,并将其附加到按钮。

void OnMouseDown() {
    Debug.Log("Clicked!");
}

保存脚本并附加后,玩游戏。单击按钮应在控制台中生成一条消息。

spawn a message

现在距离播放声音只有一步之遥。您现在要做的就是在 Audio Source 实例中调用 Play 方法。

void OnMouseDown() {
    mySource.Play();
}

保存脚本并在游戏中运行。单击按钮,您就会听到声音播放!

注意 − 考虑制作一个按钮,每次单击时音调都会升高。使用 mySource.pitch 和计数器,看看您是否能弄清楚。)