using UnityEngine; using System.Collections.Generic; public class MusicManager : MonoBehaviour { private static MusicManager m_instance = null; private string m_playedMusicFileName = ""; List m_allMusicFileNames = new List(); List m_usedMusicFileNames = new List(); float m_audioClipTime = 0f; AudioSource m_audioSourse = null; bool m_needStartNewTrack = true; bool m_inited = false; bool m_needFadeUpMusic = false; bool m_needFadeDownMusic = false; //------------------------------------------------------------------ public string PlayedMusicFileName { get { return m_playedMusicFileName; } } //------------------------------------------------------------------ public static MusicManager Instance { get { return m_instance; } } //------------------------------------------------------------------ void Init () { m_instance = this; m_audioSourse = GetComponent(); #if UNITY_IOS GlobalsVar.gMusicVolume = 0.7f; #endif m_audioSourse.volume = GlobalsVar.gMusicVolume; InitPossibleMusicTracks(); m_inited = true; DontDestroyOnLoad(this); } //------------------------------------------------------------------ void InitPossibleMusicTracks() { for (int i = 1; i < 100; ++i) { string musicPath = "Music/theme_" + i.ToString(); AudioClip clip = Resources.Load(musicPath); if (!clip) break; m_allMusicFileNames.Add(musicPath); } } //------------------------------------------------------------------ bool IsPlaying() { if (m_audioClipTime <= 0f) return false; return true; } //------------------------------------------------------------------ public void StartMusic() { if (!GlobalsVar.gNeedPlayMusic) return; PlayMusic(); } //------------------------------------------------------------------ void PlayMusic() { if (m_audioSourse.isPlaying) return; m_playedMusicFileName = m_allMusicFileNames[0]; m_audioSourse.clip = Resources.Load( m_playedMusicFileName ); m_audioClipTime = m_audioSourse.clip.length; m_audioSourse.volume = 0f; m_audioSourse.Play(); FadeUpMusicVolume(); m_needStartNewTrack = true; } //------------------------------------------------------------------ public AudioSource PlayMusicByName(string musicName) { if (musicName == "") return null; m_audioSourse.clip = Resources.Load(musicName); m_audioClipTime = m_audioSourse.clip.length; m_audioSourse.volume = 0f; m_audioSourse.Play(); FadeUpMusicVolume(); m_needStartNewTrack = true; return m_audioSourse; } //------------------------------------------------------------------ public void FadeUpMusicVolume(float time = 5f) { m_needFadeUpMusic = true; // float volume = m_audioSourse.volume; // LeanTween.value(gameObject, volume, 1f, time).setOnUpdate( // (float value) => // { // SetVolume(value); // }); } //------------------------------------------------------------------ public void FadeDownMusicVolume( System.Action onComplete = null, float time = 5f ) { m_needFadeDownMusic = true; } //------------------------------------------------------------------ public void SetVolume( float volumeValue ) { if (m_audioSourse) m_audioSourse.volume = volumeValue; } //------------------------------------------------------------------ public void StopMusic() { m_needStartNewTrack = false; if (m_audioSourse) m_audioSourse.Stop(); } //------------------------------------------------------------------ public void Update () { if (!m_inited) Init(); if (!GlobalsVar.gBoard) return; m_audioClipTime -= Time.deltaTime; m_audioClipTime = CommonFunctions.ClampDown(m_audioClipTime, 0f); if (m_audioClipTime <= 0.0f && m_needStartNewTrack) StartMusic(); UpdateMusicFade(); } //------------------------------------------------------------------ void UpdateMusicFade() { if (m_needFadeUpMusic) { float volume = m_audioSourse.volume; volume += Time.unscaledDeltaTime; if (volume > GlobalsVar.gMusicVolume) { volume = GlobalsVar.gMusicVolume; m_needFadeUpMusic = false; } SetVolume(volume); } else if (m_needFadeDownMusic) { float volume = m_audioSourse.volume; volume -= Time.unscaledDeltaTime; if (volume < 0f) { volume = 0f; m_needFadeDownMusic = false; StopMusic(); } SetVolume(volume); } } }