Игнорирование StopAllAudio() в Unity3D

#c# #unity3d

#c# #unity3d

Вопрос:

Существует аудиоисточник с фоновой музыкой. После определенного действия активируется StopAllAudio. Я хочу, чтобы фоновая музыка не отключалась, как это сделать?

Ответ №1:

Я просто догадываюсь в темноте, что вы используете StopAllAudio из этого потока, например

 private AudioSource[] allAudioSources;

private void Awake() 
{
    allAudioSources = FindObjectsOfType<AudioSource>();
}

public void StopAllAudio() 
{
    foreach(var audioSource in allAudioSources) 
    {
        audioSource.Stop();
    }
}
  

Итак, если вы хотите исключить определенное (или несколько) AudioSource из остановки, вы могли бы использовать

 // configure this in the Inspector
// set the size and reference according AudioSource(s)
// e.g. your background music source
public List<AudioSource> doNotStopSources = new List<AudioSource>();

private AudioSource[] allAudioSources;

privtae void Awake() 
{
    allAudioSources = FindObjectsOfType<AudioSource>();
}

public void StopAllAudio() 
{
    foreach(var audioSource in allAudioSources) 
    {
        // ignore AudiioSource if it is in doNotStopSources
        if(doNotStopSources.Contains(audioSource)) continue;

        audioSource.Stop();
    }
}
  

Ответ №2:

Почему бы не использовать аудиомиксер, встроенный в Unity? У вас могут быть уровни для создаваемых вами «групп», которые вы затем назначаете различным источникам звука, это позволяет вам отключать звук, изменять громкость, добавлять эффекты и т.д. Для определенных групп. Например, «окружающая среда», «заклинания», «разговоры NPC», «музыка»

Документы из Unity см.:https://docs.unity3d.com/Manual/AudioMixer.html