unity3d - 如何让游戏音频在某一点循环播放

标签 unity3d audio playback

我的游戏中有 Storm ,所以我制作了一个环境音频文件,它会慢慢变成 Storm ,然后雨水逐渐消失,然后变成一个可循环的 Storm 音频文件。这是我的做法:

// Play intro clip and merge into main loop
var introTime = stormIntro.length;
AudioSource.PlayClipAtPoint( stormIntro, Vector3.zero, 0.7 );
Invoke( "StormMusic", introTime );

我目前正在尝试的方法是获取 storm_intro 音频剪辑的长度,播放剪辑,然后调用 storm_loop 在介绍的长度完成后开始。这有点有效,但不是真的,因为两者之间偶尔会有差距。那么我该怎么做才能无缝过渡呢?

最佳答案

我现在正在为 Unity 开发音乐中间件,我经常遇到这个问题。这些“间隙”的出现只是因为 Unity 在播放之前需要从光盘加载音频数据,所以它不能真正立即播放。如果你想安排一些音频剪辑在特定时间播放,你需要提前知道它,你需要使用 AudioSource.PlayScheduled,正如@Kay 所建议的。

您需要注意,PlayScheduled 不是在标准 Time.time 上运行,而是在 AudioSettings.dspTime 上运行。它从不暂停,甚至可以在编辑器中游戏的不同启动之间保持不变。因此,您需要编写类似 audio.PlayScheduled( AudioSettings.dspTime + expectedDelay ); 的代码以在 expectedDelay 秒内播放特定音频片段。您需要将 expectedDelay 保持在某个合理的水平,以便 Unity 可以加载剪辑;数量取决于您的音频文件大小、导入设置、您要优化的设备和其他因素;我认为您可以在几次实验后得出正确的值。

但如果您尝试手动循环剪辑,在同一位置反复启动它,您将再次遇到间隙。它们会短得多,您可能无法注意到它们,但它们会在那里 — 您可以通过录制音频输出并在某些音频编辑器中查看来检查。为了摆脱这种情况,我使用具有相同剪辑的音频源并一个接一个地启动。

关于unity3d - 如何让游戏音频在某一点循环播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763532/

相关文章:

android - 为我的 android 应用程序播放声音

windows-phone-8 - WP8仿真器 “jumpy”的声音

audio - Windows Phone - 放弃应用时找出用户状态

unity3d - 如何在 Unity 中将字符串数组保存到 PlayerPrefs?

c# - 子列表项未在 C# 中显示

javascript - 使用 javascript 在移动设备中播放多种音频声音

node.js - 如何在Vue中导入和使用P5.Sound?

android - Unity3D 错误 "Failed to initialize Unity graphics"

c# - Unity构建和运行游戏错误: Error building Player: Extracting referenced dlls failed

javascript - 如何在Laravel中从数据库播放和下载音频