1
0

VolumeMaster.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using UnityEngine;
  2. namespace AudioMgr
  3. {
  4. public static class VolumeMaster
  5. {
  6. public delegate void OnVolumeChange();
  7. public static event OnVolumeChange onVolumeChange;
  8. private static float _masterVolume = 1f;
  9. private static Dictionary<AudioMaster.SourceType, float> _globalVolumes = new Dictionary<AudioMaster.SourceType, float>
  10. {
  11. { AudioMaster.SourceType.SFX, 1f },
  12. { AudioMaster.SourceType.BGM, 1f },
  13. { AudioMaster.SourceType.Voice, 1f },
  14. { AudioMaster.SourceType.Ambience, 1f },
  15. { AudioMaster.SourceType.Custom, 1f }
  16. };
  17. private static void VolumeChanged()
  18. {
  19. if (onVolumeChange != null)
  20. {
  21. onVolumeChange();
  22. }
  23. }
  24. public static float GetVolume(AudioMaster.SourceType type)
  25. {
  26. return ApplyMasterOffset(_globalVolumes[type]);
  27. }
  28. private static float ApplyMasterOffset(float volume)
  29. {
  30. return volume * _masterVolume;
  31. }
  32. public static void SetMasterVolume(float volume)
  33. {
  34. _masterVolume = volume;
  35. VolumeChanged();
  36. }
  37. public static void SetVolume(AudioMaster.SourceType type, float volume)
  38. {
  39. _globalVolumes[type] = volume;
  40. VolumeChanged();
  41. }
  42. }
  43. }