Непрерывный аудиоисточник в DontDestroyOnLoad GameObject

Моя игра содержит несколько сцен, и я хочу играть непрерывную игровую музыку между несколькими сценами.

Для этой цели я написал такой код:

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

При запуске новой сцены автоматически запускается фоновая музыка во всех моих сценах.

2 ответа

Решение

Я нашел решение этой проблемы с помощью @Harinezumi в разделе Вопрос / Ответ Unity.

Проблема в том, что AudioSource.Play() сбрасывает прогресс AudioClip. При вызове PlayLevelMusic() убедитесь, что выбранный клип отличается от текущего воспроизводимого клипа, и измените его и начните воспроизведение, только если оно есть. Как это:

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

В качестве решения вы можете использовать SceneManager.LoadSceneAsync() и поместить свой музыкальный объект в отдельную сцену.

DontDestroyOnLoad, скорее всего, в будущем обесценится (хотя не цитируйте меня по этому поводу, у меня нет внутренней информации, это догадки)

Другие вопросы по тегам