Unity - 音频简介


游戏强调音频是有原因的。为游戏增加审美价值是相当重要的。从第一个乒乓球开始,人们就可以听到球交替撞击球拍时发出的嘟嘟声和噼啪声。当时这只是一个非常简单的短方波样本,但您还想从所有视频游戏的鼻祖那里得到什么呢?

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

有许多因素可能会给我们的发动机带来不必要的负载。相反,我们尝试创建一个关于我们的声音如何在游戏中发挥作用的想法,并围绕它进行构建。这在需要处理 3 个轴的 3D 游戏中尤为突出。

在 Unity 中,我们拥有用于音频感知和播放的专用组件。这些组件协同工作,创建了一个可信的声音系统,让游戏感觉自然。

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

音频组件

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

音频源

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

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

音源

音频监听器

AudioListener 是监听场景中播放的所有音频并将其传输到计算机扬声器的组件。它的作用就像游戏的耳朵。您听到的所有音频都是从该 AudioListener 的位置角度来看的。场景中只能有一个 AudioListener 才能正常运行。默认情况下,主摄像机已附加监听器。监听器没有设计者想要关心的任何公开属性。

音频监听器

音频滤波器

AudioSource 的输出或 AudioListener 的接收可以在音频过滤器的帮助下进行修改。这些是可以改变混响、合唱、过滤等的特定组件。每个特定的过滤器都有自己的组件,并带有公开的值来调整它的声音。

音频滤波器

播放声音

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

创建圆形精灵按钮

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

附加音频源精灵

为了让对象发出声音,我们必须给它一个声音。让我们使用这个声音效果来达到我们的目的。

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

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

音效

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

音频剪辑

将声音剪辑从资源直接拖到精灵音频源中的音频剪辑插槽后,请记住在音频源属性中取消选择“唤醒时播放”;如果不这样做,游戏开始时就会播放声音。

清醒时玩

现在,让我们开始讨论我们的代码。创建一个名为“BellSound”的新脚本并将其打开。

贝尔声音

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

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

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

由于我们还没有将碰撞器附加到按钮上,所以现在就这样做。

附加一个碰撞器

我们不需要一个刚体(Rigidbody);我们也不需要通过代码访问这个碰撞器。它必须存在才能使该方法发挥作用。

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

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

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

产生一条消息

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

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

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

注意- 考虑制作一个按钮,每次单击它时音调都会升高。使用mySource.pitch和一个计数器,看看你是否能算出来。)