| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 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 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(LauncherConfig.MUSIC_KEY, _isOn);                }            }        }        private void Awake()        {            player = this.gameObject.AddComponent<AudioSource>();            player.loop = true;            isOn = LocalCache.GetBool(LauncherConfig.MUSIC_KEY, true);        }        private void Start()         {                    }        private void Update()         {                    }        public void PlayCroutine(string path, bool must = false)        {            if(currentName != path || must)            {                currentName = path;                if(coroutine != null)                {                    StopCoroutine(coroutine);                }                handle?.Release();                if (_isOn)                {                    coroutine = StartCoroutine(Play(path));                }            }        }        private IEnumerator Play(string path)        {            //AudioClip clip = GFGAsset.Load<AudioClip>(path);            handle = YooAssets.LoadAssetAsync<AudioClip>(path);            yield return handle;            player.clip = handle.AssetObject as AudioClip;            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();        }    }}
 |