本页面仅提供有关 Web 平台中的音频功能的信息。要了解如何在 Unity 项目中使用音频,请参阅音频概述。
因为 Unity 通常使用 FMOD 管理平台的音频,所以 Web 平台的音频功能有限,仅支持基本功能。FMOD 依赖于线程,而__ WebGL__一款 JavaScript API,可在 Web 浏览器中渲染 2D 和 3D 图形。Unity WebGL 构建选项让 Unity 能够将内容发布为 JavaScript 程序,而这些程序会使用 HTML5 技术和 WebGL 渲染 API 在 Web 浏览器中运行 Unity 内容。更多信息
See in Glossary API 不支持这些线程。由于这个原因,Unity 使用了一个基于内部 Web 音频 API,允许浏览器为我们处理音频回放和混音。
注意:Google Chrome 的新自动播放策略会阻止在某些情况下自动播放音频和视频。例如,虽然游戏可能设置为在游戏加载后不久自动播放一些背景音乐,但除非单击或点击网站,否则不会自动播放。有关如何启用或禁用此策略的更多信息,请参阅 Google Chrome 关于 Chrome 自动播放策略的文档。
Unity Web 支持以下 API 类:
| 类 | WebGL 支持状态 |
|---|---|
| AudioSource | WebGL 支持部分 API。有关特定支持详细信息,请参阅 AudioSource。 |
| AudioListener | 支持所有 API。 |
| AudioClip | WebGL 支持部分 API。有关特定支持详细信息,请参阅 AudioClip。 |
| AudioMixer | WebGL 支持部分 API。有关特定支持详细信息,请参阅混音器。 |
| SystemInfo.supportsAudio | 浏览器为 WebGL 提供音频支持。因此,SystemInfo.supportsAudio 始终为 true。 |
| Microphone | 不支持。 |
AudioSource API 支持基本位置音频回放,包括:
Unity WebGL 支持以下 AudioSource API:
| 设置 | 描述 |
|---|---|
| Clip | 确定下一个播放的音频剪辑。 |
| dopplerLevel | 设置该 AudioSource 的多普勒缩放。 |
| ignoreListenerPause | 运行 AudioSource 忽略 AudioListener.pause 并继续播放音频。 |
| ignoreListenerVolume | 忽略终端用户的 AudioSource 音量。 |
| isPlaying | 如果 AudioSource.clip 正在播放,则返回 true。 |
| loop | 允许应用程序循环播放 AudioSource.clip。 |
| maxDistance | 设置 AudioSource.clip 停止衰减或听不到的最大距离。 |
| minDistance | 设置 AudioSource.clip 音量不再增大的最小距离。超过最小距离,音量开始衰减。 |
| mute | AudioSource 静音。 |
| pitch | 设置 AudioSource.clip 的音高。WebGL 仅支持正音高值。 |
| playOnAwake | 唤醒时播放 AudioSource。 |
| rolloffMode | 设置 AudioSource 随距离衰减。 |
| time | 设置播放位置(以秒为单位)。 |
| timeSamples | 设置脉冲编码调制 (PCM) 样本中的播放位置。 |
| velocityUpdateMode | 设置以固定还是动态循环方式更新 AudioSource。 |
| volume | 设置 AudioSource 的音量(0.0 到 1.0)。 |
| Pause | 暂停 AudioSource.clip。 |
| Play | 播放 AudioSource.clip。 |
| PlayDelayed | 以指定的延迟播放 AudioSource.clip(以秒为单位)。 |
| PlayOneShot | 播放 AudioClip,并根据 volumeScale 调整 AudioSource 的音量。 |
| PlayScheduled | 在指定的时间播放 AudioSource。 |
| SetScheduledEndTime | 设置计划的 AudioSource.clip 结束的时间。 |
| SetScheduledStartTime | 设置计划的 AudioSource.clip 开始的时间。 |
| Stop | 停止播放 AudioSource.clip。 |
| UnPause | 取消暂停的 AudioSource.clip。 |
| PlayClipAtPoint | 在世界空间中的给定位置播放 AudioSource.clip。 |
Unity WebGL 以大多数浏览器支持的 AAC 格式导入 AudioClip 文件。Unity WebGL 支持以下 AudioClip API:
| 属性 | 描述 |
|---|---|
| length | AudioClip 的长度(以秒为单位)。 |
| loadState | 返回与 AudioClip 关联的音频数据的当前加载状态。 |
| samples | 样本中 AudioClip 的长度。 |
| loadType | 剪辑的加载类型。您可以在检视面板中设置 AudioClip 的加载类型。 |
| 方法 | 描述 | 其他信息 |
|---|---|---|
| AudioClip.Create | 使用您指定的名称和长度创建一个 AudioClip。 | Unity WebGL 部分支持 AudioClip.Create。浏览器不支持动态串流,因此要使用 AudioClip.Create 将 Stream 设置为 false。 |
| AudioClip.SetData | 在 AudioSource.clip. 中设置样本数据。 | Unity WebGL 部分支持 AudioClip.SetData。只能对加载类型 (Load Type) 设置为加载时解压缩 (Decompress on Load) 的压缩音频文件使用此方法。请参阅压缩音频。 |
| AudioClip.GetData | 从 AudioSource.clip 检索具有样本数据的数组。 | Unity WebGL 部分支持 AudioClip.GetData。只能对加载类型 (Load Type) 设置为加载时解压缩 (Decompress on Load) 的压缩音频文件使用此方法。请参阅压缩音频。 |
注意:要在 Linux 上支持音频剪辑,请确保已安装 ffmpeg 包。
Unity Web 支持混音器资产的某些功能。
您可以使用 Web 上的混音器执行以下操作:
注意:音量 (Volume) 是唯一可以在 Web 上更改的属性。不支持其他属性和音效。
要在 Unity 中将压缩音频与 WebGL 结合使用,请将 AudioClip loadType 设置为以下选项之一:
| 压缩方法 | 描述 | 注意事项 |
|---|---|---|
| CompressedInMemory | 使用此属性可以压缩磁盘上的音频,并在加载到应用程序内存中后保持压缩状态。 | 压缩音频可能会导致延迟,并且在音频播放时精度较低。但是,压缩音频在应用程序中使用的内存少于解压缩音频。最佳做法是将 CompressedInMemory 用于不受精度影响的音频,例如背景音乐。 |
| DecompressOnLoad | 使用此属性可以压缩磁盘上的音频,类似于 CompressedInMemory,并在加载到应用程序内存中时解压缩。 | 与压缩音频相比,解压缩音频使用大量内存,但具有更低的延迟和更大的音频灵活性。对受精度影响的音频(例如,角色对话框或音效)使用 DecompressedOnLoad。 |
出于安全考虑,浏览器禁止自动播放音频,直到最终用户通过鼠标点击、触摸事件或按键与应用程序网页进行交互。使用加载屏幕,让最终用户在主内容加载前与应用程序进行交互并启动音频播放。