我的游戏包含多个场景,我想在多个场景之间播放连续的游戏音乐。
为此,我编写了如下代码:
public static SoundManager Instance { get { return instance; } }
public AudioClip[] levelClips;
public AudioSource bgMusicAS;
//
private static SoundManager instance;
private bool isSoundEnable;
private void Awake ()
{
if (SoundManager.Instance != null) {
Destroy (gameObject);
return;
}
DontDestroyOnLoad (gameObject);
instance = this;
isSoundEnable = DataStorage.RetrieveSoundStatus ();
}
在游戏的主菜单中,执行上面的代码脚本并创建Don'tDestroyOnLoad AudioSource游戏对象。但是当我进入游戏场景时,游戏音乐从一开始开始,现在从我们在主菜单场景中离开的地方开始。
我希望这在所有游戏场景之间是连续的。请给我一些建议。
编辑:
这就是我播放和暂停背景音乐的方式。
public void PlayLevelMusic (int musicId)
{
if (!isSoundEnable)
return;
bgMusicAS.clip = levelClips [musicId];
bgMusicAS.Play ();
}
public void StopLevelMusic ()
{
bgMusicAS.Pause ();
}
在新场景开始时,在我拥有的所有场景中,背景音乐会自动从第一个开始。
作为解决方案,您可以使用 SceneManager.LoadSceneAsync(( 并将音乐对象放置在单独的场景中。
无论如何,DontDestroyOnLoad 将来可能会贬值(尽管不要引用我的话,我没有内部信息,这是猜测(
我通过Unity 问答部分中的@Harinezumi的帮助找到了这个问题的解决方案。
问题是 AudioSource.Play(( 重置了 AudioClip 的进度。调用 PlayLevelMusic(( 时,请检查所选剪辑是否与当前播放的剪辑不同,并且仅在不同时才更改并开始播放。喜欢这个:
if (bgMusicAS.clip != levelClips[musicId]) {
bgMusicAS.clip = levelClips[musicId];
bgMusicAS.Play();
}