DontDestroyOnLoad GameObject中的连续AudioSource

时间:2018-06-04 13:15:17

标签: unity3d gameobject audio-source

我的游戏包含多个场景,我想在多个场景之间播放连续的游戏音乐。

为此,我编写了这样的代码:

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 ();
 }

在新的场景开始时,自动背景音乐从我拥有的所有场景中开始。

2 个答案:

答案 0 :(得分:0)

作为解决方案,您可以使用SceneManager.LoadSceneAsync()并将您的音乐对象放在单独的场景中。

DontDestroyOnLoad未来很可能会被折旧(虽然不引用我这个我没有内部信息这是猜测)

答案 1 :(得分:0)

我已经在Unity问题/答案部分的@Harinezumi的帮助下找到了解决这个问题的方法。

问题是AudioSource.Play()重置了AudioClip的进度。当您调用PlayLevelMusic()时,请检查所选剪辑是否与当前播放的剪辑不同,并且仅在更改时开始播放。像这样:

if (bgMusicAS.clip != levelClips[musicId]) {
     bgMusicAS.clip = levelClips[musicId];
     bgMusicAS.Play();
 }