SoundManager.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Animancer;
  2. using ET;
  3. using ET.Client;
  4. using ET.EventType;
  5. using Mono;
  6. using System.Text.RegularExpressions;
  7. using UnityEngine;
  8. [Event]
  9. public class PlayBGMHandler : BEvent<ET.EventType.PlayBgm>
  10. {
  11. protected override async ETTask OnEvent(PlayBgm args)
  12. {
  13. if (args.Play)
  14. {
  15. SoundManager.Instance.PlayBgm(args.Bgm).Coroutine();
  16. }
  17. else
  18. {
  19. SoundManager.Instance.StopBgm();
  20. }
  21. await ETTask.CompletedTask;
  22. }
  23. }
  24. public class SoundManager : Singleton<SoundManager>, ISingletonAwake
  25. {
  26. public AudioSource UnityAudioSource { get; private set; }
  27. public bool Mute
  28. {
  29. get { return UnityAudioSource.mute; }
  30. set { UnityAudioSource.mute = value; }
  31. }
  32. public float Volume
  33. {
  34. get { return UnityAudioSource.volume; }
  35. set { UnityAudioSource.volume = value; }
  36. }
  37. public void Awake()
  38. {
  39. UnityAudioSource = GameObject.Find("/Global/Audio").GetComponent<AudioSource>();
  40. UnityAudioSource.loop = true;
  41. UnityAudioSource.volume = 1f;
  42. UnityAudioSource.playOnAwake = false;
  43. var mute = GameSetting.Instance.GetBool(GameSetting.Sets.Mute_int, GameSetting.Cnst_Mute);
  44. UnityAudioSource.mute = mute;
  45. }
  46. public async ETTask PlayBgm(string name)
  47. {
  48. Log.Debug($"play bgm:{name}");
  49. var ac = await GameObjectPool.Instance.AcquireSound(name);
  50. UnityAudioSource.clip = ac;
  51. UnityAudioSource.Play();
  52. }
  53. public void StopBgm()
  54. {
  55. Log.Debug("stop bgm");
  56. UnityAudioSource.Stop();
  57. }
  58. public async ETTask PlayUISound(string name, float duration = -1f)
  59. {
  60. var key = name;
  61. var m = Regex.Match(key, "/?res/sound/.*/([\\w_\\d]+)\\.assetbundles$");
  62. if (m.Success)
  63. {
  64. key = m.Groups[1].Value.ToLower();
  65. }
  66. var ac = await GameObjectPool.Instance.AcquireSound(key);
  67. UnityAudioSource.PlayOneShot(ac);
  68. }
  69. //TODO:实现3D音源随物体移动
  70. public async ETTask Play3DSound(string name, Vector3 pos, float duration = -1f)
  71. {
  72. var key = name;
  73. var m = Regex.Match(key, "/?res/sound/.*/([\\w_\\d]+)\\.assetbundles$");
  74. if (m.Success)
  75. {
  76. key = m.Groups[1].Value.ToLower();
  77. }
  78. //Log.Debug($"play 3dsound: {key}");
  79. var ac = await GameObjectPool.Instance.AcquireSound(key);
  80. //AudioSource.PlayClipAtPoint(ac, pos);
  81. UnityAudioSource.PlayOneShot(ac);
  82. }
  83. }