我的游戏包含多个场景,我想在多个场景之间播放连续的游戏音乐。
为此,我编写了这样的代码:
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 ();
}
在游戏的主菜单中,执行上面的代码脚本并创建了NeverDestroyOnLoad AudioSource游戏对象。但是当我进入游戏场景时,游戏音乐从第一个开始,现在从我们离开主菜单场景开始。
我希望在所有游戏场景之间保持连续。请给我一些建议。
修改
这就是我播放和暂停背景音乐的方式。
public void PlayLevelMusic (int musicId)
{
if (!isSoundEnable)
return;
bgMusicAS.clip = levelClips [musicId];
bgMusicAS.Play ();
}
public void StopLevelMusic ()
{
bgMusicAS.Pause ();
}
在新的场景开始时,自动背景音乐从我拥有的所有场景中开始。
答案 0 :(得分:0)
作为解决方案,您可以使用SceneManager.LoadSceneAsync()并将您的音乐对象放在单独的场景中。
DontDestroyOnLoad未来很可能会被折旧(虽然不引用我这个我没有内部信息这是猜测)
答案 1 :(得分:0)
我已经在Unity问题/答案部分的@Harinezumi的帮助下找到了解决这个问题的方法。
问题是AudioSource.Play()重置了AudioClip的进度。当您调用PlayLevelMusic()时,请检查所选剪辑是否与当前播放的剪辑不同,并且仅在更改时开始播放。像这样:
if (bgMusicAS.clip != levelClips[musicId]) {
bgMusicAS.clip = levelClips[musicId];
bgMusicAS.Play();
}