标题非常自我解释。但这里是我的问题的简要描述:
我正在使用playcheduled在节拍/小节上切换曲目。问题是,有时会发生某些事件,我想取消正在播放的特定排队曲目。
使用AudioSource.Stop()只会停止当前播放的曲目,之后仍会播放预定的曲目。
有什么想法吗?有没有一种方法可以称我失踪?
答案 0 :(得分:1)
您可以使用协程控制何时以及是否应播放下一个剪辑。 AudioSource.clip引用中有一个简单的示例,需要稍微扩展一下。
以下代码段播放附加到AudioSource
和ToggleAudioClips.otherClip
的剪辑,在无限循环中交替播放,直到调用ToggleAudioClips.StopPlaying ()
为止。每当当前剪辑结束时,就会启动一个新的协程。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(AudioSource))]
public class ToggleAudioClips : MonoBehaviour
{
public AudioClip otherClip;
bool stopPlaying = false;
AudioClip currentClip;
AudioClip nextClip;
void Start () {
currentClip = audio.clip;
nextClip = otherClip;
StartCoroutine (PlayClip ());
}
IEnumerator PlayClip () {
audio.clip = currentClip;
audio.Play ();
yield return new WaitForSeconds(audio.clip.length);
if (!stopPlaying) {
AudioClip c = nextClip;
nextClip = currentClip;
currentClip = c;
StartCoroutine (PlayClip ());
}
}
public bool StopPlaying () {
stopPlaying = true;
audio.Stop ();
}
}
答案 1 :(得分:1)
经过多次试验和错误后,我创建了一个全新的场景来测试各种选项后,我意识到AudioSource.Stop()将停止播放预定的音轨。在我发出取消电话后,我的错误导致我的排队系统安排了新的音轨。
要查看此工作,只需安排一个曲目并打印AudioSource.isPlaying。您会注意到,即使您当前没有播放源,也会安排它将此变量设置为“true”。一旦调用AudioSource.Stop(),该变量将被设置为false,并且预定的音轨将永远不会播放。