using System.Collections; using BrewMonster; using UnityEngine; using UnityEngine.Audio; public class AudioManager : MonoBehaviour { public static AudioManager Instance; public AudioSource bgmSource; [SerializeField] private AudioMixerGroup _bgmMixerGroup; [SerializeField] private AudioMixerGroup _ambienceMixerGroup; [SerializeField] private AudioMixerGroup _sfxMixerGroup; public AudioMixerGroup GetSfxMixerGroup => _sfxMixerGroup; private AudioSource _ambienceSource; void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); return; } DiscoverAudioSources(); // set the audio settings after all the audio sources are discovered BrewMonster.Network.EC_Game.InitSettingAudio(); } private void DiscoverAudioSources() { var sources = GetComponents(); if (sources.Length > 0) { bgmSource = sources[0]; if (_bgmMixerGroup != null) bgmSource.outputAudioMixerGroup = _bgmMixerGroup; } if (sources.Length > 1) { _ambienceSource = sources[1]; if (_ambienceMixerGroup != null) _ambienceSource.outputAudioMixerGroup = _ambienceMixerGroup; } } // ── BGM ────────────────────────────────────────────────────────────────── public void PlayBGM(AudioClip clip, float fadeTime = 1f) { StartCoroutine(FadeInBGM(clip, fadeTime)); } public void StopBGM(float fadeTime = 1f) { StartCoroutine(FadeOutBGM(fadeTime)); } IEnumerator FadeInBGM(AudioClip clip, float fadeTime) { if (bgmSource.isPlaying) yield return StartCoroutine(FadeOutBGM(fadeTime)); bgmSource.clip = clip; bgmSource.Play(); float t = 0f; while (t < fadeTime) { t += Time.deltaTime; bgmSource.volume = Mathf.Lerp(0f, 1f, t / fadeTime); yield return null; } bgmSource.volume = 1f; } IEnumerator FadeOutBGM(float fadeTime) { float startVol = bgmSource.volume; float t = 0f; while (t < fadeTime) { t += Time.deltaTime; bgmSource.volume = Mathf.Lerp(startVol, 0f, t / fadeTime); yield return null; } bgmSource.volume = 0f; bgmSource.Stop(); } // ── World music (BGM + ambience together) ──────────────────────────────── public void PlayWorldMusic(AudioClip bgm, AudioClip ambience, float fadeTime = 1f) { if (bgm != null) StartCoroutine(FadeInBGM(bgm, fadeTime)); if (ambience != null && _ambienceSource != null) StartCoroutine(FadeInAmbience(ambience, fadeTime)); } public void StopWorldMusic(float fadeTime = 1f) { StopBGM(fadeTime); if (_ambienceSource != null && _ambienceSource.isPlaying) StartCoroutine(FadeOutAmbience(fadeTime)); } // ── Ambience ───────────────────────────────────────────────────────────── IEnumerator FadeInAmbience(AudioClip clip, float fadeTime) { if (_ambienceSource.isPlaying) yield return StartCoroutine(FadeOutAmbience(fadeTime)); _ambienceSource.clip = clip; _ambienceSource.loop = true; _ambienceSource.Play(); float t = 0f; while (t < fadeTime) { t += Time.deltaTime; _ambienceSource.volume = Mathf.Lerp(0f, 1f, t / fadeTime); yield return null; } _ambienceSource.volume = 1f; } IEnumerator FadeOutAmbience(float fadeTime) { float startVol = _ambienceSource.volume; float t = 0f; while (t < fadeTime) { t += Time.deltaTime; _ambienceSource.volume = Mathf.Lerp(startVol, 0f, t / fadeTime); yield return null; } _ambienceSource.volume = 0f; _ambienceSource.Stop(); } }