using UnityEngine; using UnityEngine.Audio; using UnityEngine.UI; public class SettingUIPopup : MonoBehaviour { //오디오 설정 [Header("Audio Settings")] public AudioMixer mixer; // 믹서는 한개만 쓴다 public Slider masterSlider, bgmSlider, sfxSlider; public SwapButton masterMute, bgmMute, sfxMute; private float _defaultVolumeSlider = 0.2f; private void Start() { //오디오 ResetMasterVolume(); ResetBGMVolume(); ResetSFXVolume(); } #region 오디오 private void ResetMasterVolume() { float masterSliderValue = _defaultVolumeSlider; if (PlayerPrefs.HasKey("volumeMaster")) { masterSliderValue = PlayerPrefs.GetFloat("volumeMaster"); } masterSlider.value = masterSliderValue; mixer.SetFloat("volumeMaster", CalculateVolume(masterSliderValue)); } private void ResetBGMVolume() { float bgmSliderValue = _defaultVolumeSlider; if (PlayerPrefs.HasKey("volumeBGM")) { bgmSliderValue = PlayerPrefs.GetFloat("volumeBGM"); } bgmSlider.value = bgmSliderValue; mixer.SetFloat("volumeBGM", CalculateVolume(bgmSliderValue)); } private void ResetSFXVolume() { float sfxSliderValue = _defaultVolumeSlider; if (PlayerPrefs.HasKey("volumeSFX")) { sfxSliderValue = PlayerPrefs.GetFloat("volumeSFX"); } sfxSlider.value = sfxSliderValue; mixer.SetFloat("volumeSFX", CalculateVolume(sfxSliderValue)); } float CalculateVolume(float _sliderValue) { var slider = Mathf.Clamp(_sliderValue, 0.0001f, 1f); // 아래에서 로그변환할때 0이 들어가면 안됨 float dB = Mathf.Log10(slider) * 20f; //데시벨 변환식 return Mathf.Clamp(dB, -80f, 0f); //-80dB에서 0dB까지 조절할수있게 _sliderValue 최대값이 1이므로 dB는 계산상 0보다 크게 나올수 없음 (0db이 기준) } public void SliderVolumeMaster(float value) // 마스터 볼륨 슬라이더에 연결할 메서드 { if (value > 0) masterMute.TrueA_FalseB = true; //슬라이더를 움직였으니 뮤트가 풀리도록 else if (value <= 0) masterMute.TrueA_FalseB = false; //0이면 음소거 var volume = CalculateVolume(value); //볼륨 계산 mixer.SetFloat("volumeMaster", volume); //볼륨 적용 PlayerPrefs.SetFloat("volumeMaster", value);//슬라이더 값 저장 } public void SliderVolumeBGM(float value) // BGM 볼륨 슬라이더에 연결할 메서드 { if (value > 0) bgmMute.TrueA_FalseB = true; //슬라이더를 움직였으니 뮤트가 풀리도록 else if (value <= 0) bgmMute.TrueA_FalseB = false; //0이면 음소거 var volume = CalculateVolume(value); //볼륨 계산 mixer.SetFloat("volumeBGM", volume); PlayerPrefs.SetFloat("volumeBGM", value);//슬라이더 값 저장 } public void SliderVolumeSFX(float value) // SFX 볼륨 슬라이더에 연결할 메서드 { if (value > 0) sfxMute.TrueA_FalseB = true; //슬라이더를 움직였으니 뮤트가 풀리도록 else if (value <= 0) sfxMute.TrueA_FalseB = false; //0이면 음소거 var volume = CalculateVolume(value); //볼륨 계산 mixer.SetFloat("volumeSFX", volume); PlayerPrefs.SetFloat("volumeSFX", value);//슬라이더 값 저장 } public void MuteMaster(bool isMute) { if (isMute) { mixer.SetFloat("volumeMaster", CalculateVolume(0)); //masterSlider.value = 0; masterSlider.SetValueWithoutNotify(0); } else { ResetMasterVolume(); } } public void MuteBGM(bool isMute) { if (isMute) { mixer.SetFloat("volumeBGM", CalculateVolume(0)); //bgmSlider.value = 0; bgmSlider.SetValueWithoutNotify(0); } else { ResetBGMVolume(); } } public void MuteSFX(bool isMute) { if (isMute) { mixer.SetFloat("volumeSFX", CalculateVolume(0)); //sfxSlider.value = 0; sfxSlider.SetValueWithoutNotify(0); } else { ResetSFXVolume(); } } #endregion }