Files
2026-05-06 18:44:52 -05:00

102 lines
2.7 KiB
C#

using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class SoundSettingManager : MonoBehaviour
{
public AudioMixer audioMixer;
float masterVolume;
float musicVolume;
float sfxVolume;
Slider MasterSlider;
Slider SfxSlider;
Slider MusicSlider;
private void Start()
{
MasterSlider.value = masterVolume;
SfxSlider.value = sfxVolume;
MusicSlider.value = musicVolume;
}
public void ReloadReferences()
{
MasterSlider = GameObject.FindWithTag("MasterSlider").GetComponent<Slider>();
SfxSlider = GameObject.FindWithTag("SfxSlider").GetComponent<Slider>();
MusicSlider = GameObject.FindWithTag("MusicSlider").GetComponent<Slider>();
MasterSlider.onValueChanged.AddListener(OnMasterValueChanged);
SfxSlider.onValueChanged.AddListener(OnSfxValueChanged);
MusicSlider.onValueChanged.AddListener(OnMusicValueChanged);
MasterSlider.value = masterVolume;
SfxSlider.value = sfxVolume;
MusicSlider.value = musicVolume;
}
public void OnMasterValueChanged(float newValue)
{
masterVolume = newValue;
SetVolumeFloat(newValue, "MasterVolume");
}
public void OnSfxValueChanged(float newValue)
{
sfxVolume = newValue;
SetVolumeFloat(newValue, "SFXVolume");
}
public void OnMusicValueChanged(float newValue)
{
musicVolume = newValue;
SetVolumeFloat(newValue, "MusicVolume");
}
private void SetVolumeFloat(float sliderVal, string mixerGroup)
{
// Convert linear 0-1 to dB (-80 to 0 range)
float dbValue = Mathf.Log10(sliderVal) * 20;
if (sliderVal == 0)
{
dbValue = -80;
}
audioMixer.SetFloat(mixerGroup, dbValue);
}
#region Sound Settings Data Save/Load
public void SaveSoundSettingsData(ref SoundSettingSaveData data)
{
data.musicVolume = musicVolume;
data.sfxVolume = sfxVolume;
data.masterVolume = masterVolume;
}
public void LoadSoundSettingsData(SoundSettingSaveData data)
{
musicVolume = data.musicVolume;
sfxVolume = data.sfxVolume;
masterVolume = data.masterVolume;
MasterSlider.value = masterVolume;
SfxSlider.value = sfxVolume;
MusicSlider.value = musicVolume;
SetVolumeFloat(masterVolume, "MasterVolume");
SetVolumeFloat(musicVolume, "MusicVolume");
SetVolumeFloat(sfxVolume, "SFXVolume");
}
#endregion
}
[System.Serializable]
public struct SoundSettingSaveData
{
public float musicVolume;
public float sfxVolume;
public float masterVolume;
}