AudioSource循环播放约5秒后自动停止问题求助
AudioSource循环自动停止的问题排查与修复
你的问题出在PlayOneShot方法的使用上——这个方法本身不支持循环播放,哪怕你设置了m_audioSource2.loop = true也没用。PlayOneShot会创建一个临时的音频实例,只播放一次音频片段,当片段播放完毕后就会自动停止,这就是为什么运行一段时间后声音停了。
而且你的代码逻辑里,每次调用PlayAccelerateSound都在重复设置clip和loop,但这些配置对PlayOneShot完全不起作用,因为它是独立于AudioSource状态的播放方式。
修复方案
把PlayOneShot替换成AudioSource的普通Play()方法,这个方法会遵守你设置的loop属性。修改后的代码如下:
private void PlayAccelerateSound() { m_audioSource2.loop = true; m_audioSource2.clip = m_engineSound; if (!alreadyPlayed && !m_audioSource2.isPlaying) { m_audioSource2.Play(); alreadyPlayed = true; } // 音调控制逻辑不变 if (rb.velocity.x < minPitch) { m_audioSource2.pitch = minPitch; } else if (rb.velocity.x > maxPitch) { m_audioSource2.pitch = maxPitch; } else { m_audioSource2.pitch = rb.velocity.x; } }
关键改动说明
- 用
m_audioSource2.Play()替代PlayOneShot:Play方法会使用AudioSource自身的配置(包括loop),设置loop=true后会持续循环播放。 - 增加
!m_audioSource2.isPlaying判断:防止在音频已经播放时重复调用Play(虽然Play方法本身不会重复启动,但加上这个判断更稳妥,避免意外情况)。
另外,你可以考虑把m_audioSource2.clip = m_engineSound和m_audioSource2.loop = true移到Awake或Start方法里,不用每次调用播放方法都重复设置,提升效率。
内容的提问来源于stack exchange,提问作者alt4s
相关产品推荐
相关产品推荐

