Files
Genesis_Unity/Assets/02_Scripts/UI/Setting/SettingUIPopup.cs

139 lines
4.4 KiB
C#

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
}