전체 스크립트
public class SettingUI : MonoBehaviour
{
public AudioMixer audioMixer;
public Slider slider;
public void Start()
{
LoadAudioSetting();
}
//Unity는 -80~0의 범위를 가진 변수로 볼륨을 조절한다.(-80은 음소거)
//슬라이더 바는 0.001~1사이의 값을 리턴하므로 수식을 통해 변환시킨다.
//볼륨 값 저장을 위한 변수 CurrentValue
public void SetLevel(float value)
{
float ChangeValue;
if (value <= 0.001f)
ChangeValue = -80;
else
ChangeValue = Mathf.Log10(value) * 20;
audioMixer.SetFloat("MasterVolume", ChangeValue);
SaveAudioSetting(value);
}
public void SaveAudioSetting(float value)
{
PlayerPrefs.SetFloat("MasterVolume", value);
}
//PlayerPrefs에 저장된 볼륨 수치 갖고오기
public void LoadAudioSetting()
{
if (PlayerPrefs.HasKey("MasterVolume"))
{
float CurrentValue = PlayerPrefs.GetFloat("MasterVolume");
Debug.Log(CurrentValue);
slider.value = Mathf.Clamp(CurrentValue, slider.minValue, slider.maxValue);
SetLevel(CurrentValue);
}
}
}
이러한 슬라이더 준비


슬라이더바의 value를 오디오 볼륨값으로 변환하기 위한 수식이다. 이유는 주석과 같다.
//Unity는 -80~0의 범위를 가진 변수로 볼륨을 조절한다.(-80은 음소거)
//슬라이더 바는 0.001~1사이의 값을 리턴하므로 수식을 통해 변환시킨다.
//볼륨 값 저장을 위한 변수 CurrentValue
public void SetLevel(float value)
{
float ChangeValue;
if (value <= 0.001f)
ChangeValue = -80;
else
ChangeValue = Mathf.Log10(value) * 20;
audioMixer.SetFloat("MasterVolume", ChangeValue);
SaveAudioSetting(value);
}
Playerprefs는 온라인 게임에서 사용하는 서버에 저장하는 데이터와 다르게 클라이언트에게 맡기는 데이터이다. Key value형식을 갖고 있으며, int형 float형 string형 등의 자료형으로 저장한다. 보안이 취약하기에 보안이 필요없는 잡다한 세팅(오디오 설정, 키 설정) 등등에 유용하게 쓸 수 있으며 서버의 부담을 조금이나마 줄여줄 수 있다.
public void SaveAudioSetting(float value)
{
PlayerPrefs.SetFloat("MasterVolume", value);
}
슬라이더 바의 value를 저장한다.
MasterVolume이라는 Key값으로 저장된 value값을 가진 float형 데이터를 저장하는 함수이다.
대충 쉽게 설명하면 MasterVolume : value(자료형:float) 이런 식으로 저장되어 있는것이다.
접근하는 함수는 다음과 같다.
public void LoadAudioSetting()
{
if (PlayerPrefs.HasKey("MasterVolume"))
{
float CurrentValue = PlayerPrefs.GetFloat("MasterVolume");
Debug.Log(CurrentValue);
slider.value = Mathf.Clamp(CurrentValue, slider.minValue, slider.maxValue);
SetLevel(CurrentValue);
}
}
HasKey는 괄호 안에 들어간 이름의 Key가 있는지 검사하는 함수이다.
MasterVolume이라는 key값을 가진 데이터가 있는가 묻는데 있으면 true 없으면 false
혹시 모를 범위 초과를 막기 위해 clamp로 제한을 둔다.(0.001(minvalue)~1(maxvalue))이 둘은 슬라이더 바의 인스펙터에서 설정 가능.
존재한다면 값을 가져와서 슬라이더 바의 value(슬라이더 진행도라고 표현하겟음)에 적용하고 오디오 믹서에서도 적용한다.
Start문에 심어서 게임이 로딩될 때 설정이 되도록.