跳到主要内容

音频基础

坦克正在机器人周围移动。点击游戏中的任意位置即可开火。

声源与监听器​

在本教程中,机器人位于场景中央,坦克围绕机器人旋转。坦克发动机发出的声音以机器人的耳朵为参照。随着坦克移动,可以听到声源位置从左侧依次转到后方、右侧和前方。

PlayCanvas 的基础音频系统围绕两种组件构建。

Sound 组件播放 Wave、MP3 或 Ogg Vorbis 等音频资源。可以把它想象为场景中的扬声器。场景可以包含多个 Sound 组件,每个组件可以播放多种声音。

每个 Sound 组件由若干槽位组成,每个槽位都有名称,并定义要播放的具体声音。同一个 Sound 组件中的多个槽位可以彼此独立地播放。

AudioListener 组件决定声音的听感,可以把它想象为场景中的麦克风。同一时间只能有一个处于活动状态的 AudioListener。

场景设置​

你可以在编辑器中自行查看本教程的层级结构。场景中主要包含以下实体:

Playbot​

机器人带有 AudioListener 组件,因此所有声音都以机器人的位置为参照。

Rotator​

此实体用来旋转坦克。其 Script 组件中的脚本让实体以恒定速度绕 Y 轴旋转。

Tank​

坦克是 Rotator 的子实体,因此会随其旋转。它带有一个包含两个槽位的 Sound 组件:

engine 槽位负责循环播放坦克发动机声音,并设置为场景加载后自动播放(Auto Play)。

另一个槽位名为 shoot。每次点击画布让炮塔开火时,脚本都会播放该槽位。此槽位启用了 Overlap,允许连续开火时每次创建新的声音,而不是反复重启同一个声音。

坦克还带有 Script 组件,处理用户输入并让炮塔开火,同时播放射击音效,以及简单动画和粒子系统等其他效果。

创建声源​

选中要添加声音的实体,在 Entity 菜单中选择 New Component,从组件列表中选择 sound,然后点击 Add 按钮,即可创建声源。

声音属性随后会显示在属性编辑器中。

声音组件

上图展示了坦克实体的 Sound 组件。下面介绍部分属性:

Positional(空间化)​

勾选后,声音会根据当前 AudioListener(本例中的机器人)在 3D 空间中的相对位置播放。取消勾选后,声音以 2D 方式通过左右扬声器播放。

Asset(资源)​

每个槽位都有资源选择器,可以为不同槽位选择不同音频资源。有关上传音频资源的方式,参见导入资源。

备注

并非所有浏览器都支持所有音频格式。目前推荐使用大多数浏览器都支持的 MP3(.mp3)。

上传资源后,使用资源选择器为槽位选择音频资源。

Auto Play(自动播放)​

如果希望槽位在场景加载后立即播放,将此项设为 true;否则设为 false,通过脚本播放槽位。

Overlap(重叠播放)​

未勾选时,每次通过脚本播放槽位,声音都会从头开始。如果不需要声音重叠,例如播放背景音乐,或无需重复触发的声音,可以保持不勾选。

如果希望连续触发声音时不打断前一次播放,将此项设为 true。本教程的射击音效启用了重叠播放。

Loop(循环)​

音频片段默认播放一次后停止。如果希望声音持续循环,例如背景音乐,可以勾选 Loop。本例中发动机声音循环播放,射击声音则不循环。

创建监听器​

选中用来代表听者的实体,为它添加 AudioListener。通常会使用游戏相机,因为那里代表玩家的头部位置。本例则将 AudioListener 附加到机器人上。

备注

同一时间只能有一个活动的 AudioListener。最后创建的 AudioListener 组件会成为活动监听器。