using Animancer; using ET; using ET.Client; using ET.EventType; using Mono; using System.Text.RegularExpressions; using UnityEngine; [Event(SceneType.None)] public class PlayBGMHandler : BEvent { public override void OnEvent(PlayBgm args) { if (args.Play) { SoundManager.Instance.PlayBgm(args.Bgm).Coroutine(); } else { SoundManager.Instance.StopBgm(); } } } public class SoundManager : Singleton, ISingletonAwake { public AudioSource UnityAudioSource { get; private set; } public bool Mute { get { return UnityAudioSource.mute; } set { UnityAudioSource.mute = value; } } public float Volume { get { return UnityAudioSource.volume; } set { UnityAudioSource.volume = value; } } public void Awake() { UnityAudioSource = GameObject.Find("/Global/Audio").GetComponent(); UnityAudioSource.loop = true; UnityAudioSource.volume = 1f; UnityAudioSource.playOnAwake = false; var mute = GameSetting.Instance.GetBool(GameSetting.Sets.Mute_int); UnityAudioSource.mute = mute; } public async ETTask PlayBgm(string name) { Log.Debug($"play bgm:{name}"); var ac = await GameObjectPool.Instance.AcquireSound(name); UnityAudioSource.clip = ac; UnityAudioSource.Play(); } public void StopBgm() { Log.Debug("stop bgm"); UnityAudioSource.Stop(); } public async ETTask PlayUISound(string name, float duration = -1f) { var key = name; var m = Regex.Match(key, "/?res/sound/.*/([\\w_\\d]+)\\.assetbundles$"); if (m.Success) { key = m.Groups[1].Value.ToLower(); } var ac = await GameObjectPool.Instance.AcquireSound(key); UnityAudioSource.PlayOneShot(ac); } //TODO:实现3D音源随物体移动 public async ETTask Play3DSound(string name, Vector3 pos, float duration = -1f) { var key = name; var m = Regex.Match(key, "/?res/sound/.*/([\\w_\\d]+)\\.assetbundles$"); if (m.Success) { key = m.Groups[1].Value.ToLower(); } //Log.Debug($"play 3dsound: {key}"); var ac = await GameObjectPool.Instance.AcquireSound(key); //AudioSource.PlayClipAtPoint(ac, pos); UnityAudioSource.PlayOneShot(ac); } }