Unity中AudioSource恢复播放功能异常问题求助
问题:Unity切换界面后音频暂停无法从断点恢复,从头播放
在Unity项目的介绍界面中,用户通过前进按钮切换不同的图片+音频组,每个界面配有播放、暂停、重播按钮。第一个界面功能正常,但切换到加载新资源的第二个界面后,暂停音频再点击播放,音频会从头开始而非从暂停点恢复。
调试时发现,执行_audioSource.UnPause()时音频能正常从断点恢复,但退出调试回到Unity运行时问题复现。已尝试将AudioSource的Play On Awake设为false,无效。
相关代码如下:
public void PlayAudio() { if (_bIsAudioPaused) { _audioSource.UnPause(); } else { _audioSource.Play(); } _playButton.SetActive(false); _bIsAudioPaused = false; _bIsAudioPlaying = true; Screen.sleepTimeout = SleepTimeout.NeverSleep; } public void PauseAudio() { _audioSource.Pause(); _bIsAudioPaused = true; _bIsAudioPlaying = false; Screen.sleepTimeout = SleepTimeout.SystemSetting; } public void ReplayAudio() { PlayAudio(); } public void AudioFinished() { _bIsAudioPlaying = false; Screen.sleepTimeout = SleepTimeout.SystemSetting; } private void Update() { if (_bIsAudioPlaying && !_audioSource.isPlaying) { AudioFinished(); } }
可能的原因及修复方案:
界面切换时状态不同步
切换界面加载新资源时,状态变量_bIsAudioPaused可能未与AudioSource的实际状态同步。在界面激活时(比如OnEnable())添加状态同步逻辑:void OnEnable() { _bIsAudioPaused = !_audioSource.isPlaying; _bIsAudioPlaying = _audioSource.isPlaying; }手动记录并恢复暂停进度
直接依赖UnPause()可能因资源加载导致状态异常,改为手动记录暂停时的进度,恢复时强制设置:private float _lastPausedTime; public void PauseAudio() { _lastPausedTime = _audioSource.time; _audioSource.Pause(); _bIsAudioPaused = true; _bIsAudioPlaying = false; Screen.sleepTimeout = SleepTimeout.SystemSetting; } public void PlayAudio() { if (_bIsAudioPaused) { _audioSource.time = _lastPausedTime; _audioSource.Play(); } else { _audioSource.time = 0; _audioSource.Play(); } _playButton.SetActive(false); _bIsAudioPaused = false; _bIsAudioPlaying = true; Screen.sleepTimeout = SleepTimeout.NeverSleep; }检查界面切换时的AudioClip赋值逻辑
确认切换界面加载新音频时,仅在需要播放全新音频时重置_audioSource.time为0,避免覆盖暂停状态下的进度。
内容的提问来源于stack exchange,提问作者Vanessa M
相关产品推荐
相关产品推荐

