Unity - 音频简介
游戏重视音频是有原因的;为游戏增加美学价值非常重要。从最早的Pong开始,人们就可以听到球交替击打挡板时发出的哔哔声和嘟嘟声。当时这是一个非常简单的短方波样本,但对于所有视频游戏的鼻祖,你还能要求什么呢?
在现实生活中,许多因素都会影响你感知声音的方式;物体的速度、它所处的场景类型以及它来自哪个方向。
有许多因素会对我们的引擎造成不必要的负载。相反,我们试图创造一个关于我们的声音如何在游戏中发挥作用的想法,并围绕这个想法进行构建。这在 3D 游戏中尤为突出,因为 3D 游戏中有 3 个轴需要处理。
在 Unity 中,我们有专门的组件用于音频感知和播放。这些组件共同作用,创造出一种可信的、让游戏感觉自然的声音系统。
Unity 为我们提供了一系列有用的工具和效果,如混响、多普勒效应、实时混音和效果等。我们将在后续章节中学习这些内容。
音频组件
在本节中,我们将学习 Unity 中与音频相关的 3 个主要组件。
AudioSource
AudioSource 组件是您将附加到 GameObject 以使其播放声音的主要组件。当通过混音器、通过代码触发或默认情况下唤醒时,它将播放 AudioClip。
AudioClip 只是一个加载到 AudioSource 中的声音文件。它可以是任何标准音频文件,例如 .mp3、.wav 等。 AudioClip 本身也是一个组件。
AudioListener
AudioListener 是监听场景中播放的所有音频并将其传输到计算机扬声器的组件。它就像游戏的耳朵。您听到的所有音频都与此 AudioListener 的位置有关。场景中只能有一个 AudioListener 才能正常工作。默认情况下,主摄像头会连接 Listener。 Listener 没有任何设计人员需要关注的公开属性。
音频过滤器
AudioSource 的输出或 AudioListener 的输入可通过音频过滤器进行修改。这些是可以更改混响、合唱、过滤等的特定组件。每个特定过滤器都带有自己的组件,并带有公开值以调整其声音。
播放声音
让我们尝试制作一个单击时播放声音的按钮。首先,我们将创建一个圆形精灵,并将其设为红色。
现在,让我们将音频源附加到此精灵。
为了让对象播放声音,我们必须为其添加声音。让我们将这个音效用于我们的目的。
http://www.orangefreesounds.com/ding-sfx/
下载音效,并将其拖到 Assets 中。
当 Unity 将此资产作为声音文件导入时,它会自动转换为 AudioClip。因此,您可以将此声音片段从 Assets 直接拖到我们精灵的音频源中的音频片段插槽上。
将声音片段从 Assets 直接拖到我们精灵的音频源中的音频片段插槽上后,请记住在音频源属性中取消选择"唤醒时播放";不这样做会使声音在游戏开始时播放。
现在,让我们进入代码。创建一个名为"BellSound"的新脚本并打开它。
由于我们的音频源是通过代码控制的,因此我们首先要获取对它的引用。我们将像以前一样使用 GetComponent 方法。
public class BellSound : MonoBehaviour { AudioSource mySource; // Use this for initialization void Start () { mySource = GetComponent<AudioSource>(); }
现在,让我们设置方法来检测被点击的对象。MonoBehaviour 为我们提供了所需的方法,名为 OnMouseDown。每当鼠标在该游戏对象的 collider 范围内点击时,都会调用该方法。
由于我们尚未将碰撞器附加到按钮上,我们现在就这样做。
我们不需要 Rigidbody;我们也不需要通过代码访问此碰撞器。它只需存在即可使方法正常工作。
让我们测试该方法并查看它是否有效。在脚本中编写以下代码,并将其附加到按钮。
void OnMouseDown() { Debug.Log("Clicked!"); }
保存脚本并附加后,玩游戏。单击按钮应在控制台中生成一条消息。
现在距离播放声音只有一步之遥。您现在要做的就是在 Audio Source 实例中调用 Play 方法。
void OnMouseDown() { mySource.Play(); }
保存脚本并在游戏中运行。单击按钮,您就会听到声音播放!
注意 − 考虑制作一个按钮,每次单击时音调都会升高。使用 mySource.pitch 和计数器,看看您是否能弄清楚。)