Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / Audio / VolumeController.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Audio;
  5. using UnityEngine.UI;
  6. public class VolumeController : MonoBehaviour
  7. {
  8. [SerializeField] private Slider masterVolumeSlider;
  9. [SerializeField] private Slider musicVolumeSlider;
  10. [SerializeField] private Slider sfxVolumeSlider;
  11. [SerializeField] private AudioMixer audioMixer;
  12. private void Start()
  13. {
  14. // Initialize sliders with current AudioMixer values (optional)
  15. float currentMasterVol;
  16. float currentMusicVol;
  17. float currentSFXVol;
  18. if (audioMixer.GetFloat("Master", out currentMasterVol))
  19. masterVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentMasterVol);
  20. if (audioMixer.GetFloat("Music", out currentMusicVol))
  21. musicVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentMusicVol);
  22. if (audioMixer.GetFloat("SFX", out currentSFXVol))
  23. sfxVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentSFXVol);
  24. masterVolumeSlider.onValueChanged.AddListener(delegate
  25. {
  26. SetVolume("Master", masterVolumeSlider.value);
  27. });
  28. musicVolumeSlider.onValueChanged.AddListener(delegate
  29. {
  30. SetVolume("Music", musicVolumeSlider.value);
  31. });
  32. sfxVolumeSlider.onValueChanged.AddListener(delegate
  33. {
  34. SetVolume("SFX", sfxVolumeSlider.value);
  35. });
  36. }
  37. private void SetVolume(string audioGroup, float value)
  38. {
  39. // Convert the slider value (0 to 1) to decibels (-80 dB to 0 dB)
  40. float dB = Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * 20f;
  41. audioMixer.SetFloat(audioGroup, dB);
  42. }
  43. }