| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | using System.Collections;using UnityEngine;using GFGGame.Launcher;using YooAsset;namespace GFGGame{    public class MusicManager : SingletonMonoBase<MusicManager>    {        private AudioSource player;        private string currentName;        private AssetOperationHandle handle;        private Coroutine coroutine;        private float settingVolumn = 1f;       // 设置音量        private float tempVolume = 1f;          // 临时音量        private float changeBaseValue = 0.01f;  // 缓动单位改变基数        private bool _isOn = true;        public bool isOn        {            get            {                return _isOn;            }            set            {                if (_isOn != value)                {                    _isOn = value;                    if (_isOn)                    {                        if (currentName != null)                        {                            PlayCroutine(currentName, true);                        }                    }                    else                    {                        Stop();                    }                    LocalCache.SetBool(GameConfig.MUSIC_KEY, _isOn);                }            }        }        private void Awake()        {            player = this.gameObject.AddComponent<AudioSource>();            player.loop = true;            isOn = LocalCache.GetBool(GameConfig.MUSIC_KEY, true);            settingVolumn = LocalCache.GetFloat(GameConfig.MUSIC_VOLUMN_KEY, 1.0f);            player.volume = settingVolumn;        }        private void Update()        {            if (player.clip == null || !isOn)            {                return;            }            // 播放语音时背景音乐变小            if (VoiceManager.Instance.IsPlaying())            {                tempVolume = 0.17f;            }            else            {                tempVolume = settingVolumn;            }            // 音量缓动变化            if (player.volume != tempVolume)            {                player.volume = Mathf.Lerp(player.volume, tempVolume, changeBaseValue);                if (Mathf.Abs(player.volume - tempVolume) <= 0.05)                {                    player.volume = tempVolume;                }            }        }        public void PlayCroutine(string path, bool must = false, float volume = 1.0f)        {            if (currentName != path || must)            {                currentName = path;                if (coroutine != null)                {                    StopCoroutine(coroutine);                }                handle?.Release();                if (_isOn)                {                    coroutine = StartCoroutine(Play(path, volume));                }            }        }        private IEnumerator Play(string path, float volume = 1.0f)        {            //AudioClip clip = GFGAsset.Load<AudioClip>(path);            handle = YooAssets.LoadAssetAsync<AudioClip>(path);            yield return handle;            player.clip = handle.AssetObject as AudioClip;            player.volume = volume;            player.Play();        }        public float GetSoundTime()        {            if (player.clip != null)            {                return player.clip.length;            }            return 0;        }        public void Pause()        {            player.Pause();        }        public void UnPause()        {            player.UnPause();        }        public void Stop()        {            handle?.Release();            player?.Stop();        }        public void SetVolume(float volume)        {            player.volume = volume;        }        public void SetSettingVolumn(float volume)        {            settingVolumn = volume;        }        public float GetSettingVolumn()        {            return settingVolumn;        }    }}
 |