代码之家  ›  专栏  ›  技术社区  ›  Siddharth

dontdestroyonload gameobject中的连续音频源[重复]

  •  0
  • Siddharth  · 技术社区  · 6 年前

    这个问题已经有了答案:

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

    为此,我编写了如下代码:

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

    在游戏的主菜单上,上面的代码脚本被执行,并且不会创建destroyonload audiosource gameobject。但当我继续进入游戏场景时,游戏音乐从一开始就开始了,现在从我们在主菜单场景中留下的位置开始。

    我希望这在游戏的所有场景之间都是连续的。请给我一些建议。

    编辑:

    这就是我播放和暂停背景音乐的方式。

    public void PlayLevelMusic (int musicId)
     {
         if (!isSoundEnable)
             return;
         bgMusicAS.clip = levelClips [musicId];
         bgMusicAS.Play ();
     }
     public void StopLevelMusic ()
     {
         bgMusicAS.Pause ();
     }
    

    在新的场景开始,自动背景音乐开始从第一个在我所有的场景。

    2 回复  |  直到 6 年前
        1
  •  0
  •   zambari    6 年前

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

    不管怎样,dontdestroyonload在未来很可能会贬值(尽管不要引用我的话,我没有内部信息,这是猜测)

        2
  •  0
  •   Siddharth    6 年前

    我通过@harinezumi在unity问答部分的帮助找到了这个问题的解决方案。

    问题是audiosource.play()重置音频剪辑的进度。调用PlayLevelMusic()时,请检查所选剪辑是否与当前播放的剪辑不同,并且仅当它们不同时才更改并开始播放。这样地:

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