AudioClip 截断并延迟音频播放

Posted

技术标签:

【中文标题】AudioClip 截断并延迟音频播放【英文标题】:AudioClip chopped and delaying audio play 【发布时间】:2015-11-01 09:51:48 【问题描述】:

我需要一些帮助来解决我在编写游戏时发现的声音问题。

我有一个事件(指针单击),我需要在该事件中播放声音。

播放我正在使用的声音:

 Audiosource.PlayClipAtPoint(pop, transform.position, 1f);

在指令之后我有一堆代码行,然后我重新加载场景以重新开始。

到目前为止,声音已播放,但被场景重新加载(我猜......)切断了,所以我尝试使用延迟

 IEnumerator WaitingForSomething()
     
         UnityEngine.Debug.Log("Before Waiting");
         yield return new WaitForSeconds(2);
         UnityEngine.Debug.Log("After Waiting");
         print(Time.time);
     

但它没有工作。谷歌将我带到this 回答有关 WaitForSeconds() 执行的问题。我的 WaitingForSomething() 从不打印 after waiting debug 或 Time.time 因为当它到达 yield return 时,它会返回到之前的位置,接下来的 50 行代码执行得如此之快,以至于 2 秒被场景砍掉了重新加载。

所以我的问题是:

    如何强制完整播放 AudioClip?

    如果我不能强制完整播放 AudioClip,有没有办法强制 Unity3D 停止并等待 AudioClip 完全播放?

谢谢。

【问题讨论】:

【参考方案1】:
IEnumerator WaitForSound()

//PlaySound
yield return new WaitForSeconds(audioClip.lenght)// audioClip is the sound you are playing , this just pseudo code
Application.LoadLevel("SomeLevelname");

只需在调用加载关卡之前完成所有您需要的代码并使用这个 I 枚举器来播放声音,等待其持续时间然后加载关卡。

【讨论】:

感谢您的回答,抱歉,此解决方案不实用。声音是我在事件中需要做的第一件事,最后是重新加载。重新加载将省略我需要在声音之后但重新加载之前执行的其余代码。【参考方案2】:

也许你应该简化它。 Unity 本身为您提供了添加音频源的最简单方法。您是否尝试将音频源组件添加到您希望音频源从中播放的层次结构中的对象?还要确保您的音频侦听器是靠近音频源的对象的父级,并且场景中应该只有一个音频侦听器。任何音频剪辑都可以添加到音频源中,无论它有多长,并且可以选择循环播放。

【讨论】:

@A.Njunguna 感谢您的回答。问题不在于我如何播放声音。现在我在这里使用第一个答案中解释的第一种方法:https://www.reddit.com/r/Unity3D/comments/2rk7sp/playing_audioclip_with_script_c/,并且音频被剪切,它永远不会完全播放。我也尝试了第二种方法,这几乎就是你所建议的,同样的结果。 声音之后的其余代码在不到一秒的时间内执行,因此音频文件永远不会完全播放。

以上是关于AudioClip 截断并延迟音频播放的主要内容,如果未能解决你的问题,请参考以下文章

java游戏教程--音频添加

Unity SKFramework框架Audio音频管理器

蓝牙延迟和 Android 音频提示

音频_UnityAudio系统(1.AudioClip)

在黑莓中无延迟播放音频

Unity 播放音频文件