Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / Audio / VolumeController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;

public class VolumeController : MonoBehaviour
{
    [SerializeField] private Slider masterVolumeSlider;
    [SerializeField] private Slider musicVolumeSlider;
    [SerializeField] private Slider sfxVolumeSlider;

    [SerializeField] private AudioMixer audioMixer;

    private void Start()
    {
        // Initialize sliders with current AudioMixer values (optional)
        float currentMasterVol;
        float currentMusicVol;
        float currentSFXVol;

        if (audioMixer.GetFloat("Master", out currentMasterVol))
            masterVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentMasterVol);
        if (audioMixer.GetFloat("Music", out currentMusicVol))
            musicVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentMusicVol);
        if (audioMixer.GetFloat("SFX", out currentSFXVol))
            sfxVolumeSlider.value = Mathf.InverseLerp(-80f, 0f, currentSFXVol);

        masterVolumeSlider.onValueChanged.AddListener(delegate
        {
            SetVolume("Master", masterVolumeSlider.value);
        });

        musicVolumeSlider.onValueChanged.AddListener(delegate
        {
            SetVolume("Music", musicVolumeSlider.value);
        });

        sfxVolumeSlider.onValueChanged.AddListener(delegate
        {
            SetVolume("SFX", sfxVolumeSlider.value);
        });
    }

    private void SetVolume(string audioGroup, float value)
    {
        // Convert the slider value (0 to 1) to decibels (-80 dB to 0 dB)
        float dB = Mathf.Log10(Mathf.Clamp(value, 0.0001f, 1f)) * 20f;
        audioMixer.SetFloat(audioGroup, dB);
    }
}