liangxiegame/QFramework

AudioKit 游戏暂停时 callback 无法回调

Opened this issue · 1 comments

我正在使用 AudioKit 中的

public static AudioPlayer PlaySound(AudioClip clip, bool loop = false, Action<AudioPlayer> callBack = null, float volume = 1.0f)

播放某个 UI 音效,此时游戏时暂停的(Time.timeScale = 0),传入的 callback 事件在音效播放完毕后未执行,而是在游戏恢复时才一起执行。

QF version: 1.0141

我了解到 Unity 原生的 AudioSource 没有提供结束事件接口,网上大致通过两种协程方式判断:1)等待 AudioChip.length 时间长度;2)根据 AudioSource.IsPlaying 状态判断。我目前采用第二种方法,并封装了一个自己的 AudioSource:

public void Pause()
{
    _isPaused = true;
    _audioSource?.Pause();
}

public void Resume()
{
    _audioSource?.UnPause();
    _isPaused = false;
}

public void Stop()
{
    _audioSource?.Stop();
}

private IEnumerator FinishCoroutine(Action<MyAudioSource> onFinish)
{
    yield return new WaitUntil(() => !_audioSource.isPlaying && !_isPaused);
    onFinish?.Invoke(this);
}

上述逻辑对我是有效的,它不会受到 Time.timeScale 的影响(因为音频的播放也不会受到该影响,所以我认为这样是更合理的),当 AudioSource 正常播放完毕或者被 Stop 则会调用 onFinish,此外上述逻辑同样适用于 loop=true 的 AudioSource,而使用等待时间来监听是否完成处理 loop 的音频需要额外的逻辑处理。