如何取消AudioSource.PlayScheduled()调用

时间:2014-01-20 09:24:32

标签: c# unity3d

标题非常自我解释。但这里是我的问题的简要描述:

我正在使用playcheduled在节拍/小节上切换曲目。问题是,有时会发生某些事件,我想取消正在播放的特定排队曲目。

使用AudioSource.Stop()只会停止当前播放的曲目,之后仍会播放预定的曲目。

有什么想法吗?有没有一种方法可以称我失踪?

2 个答案:

答案 0 :(得分:1)

您可以使用协程控制何时以及是否应播放下一个剪辑。 AudioSource.clip引用中有一个简单的示例,需要稍微扩展一下。

以下代码段播放附加到AudioSourceToggleAudioClips.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,并且预定的音轨将永远不会播放。