설정 저장하기
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 25번째.
설정은 한 번 선택하면 이후 모든 게임에서 그대로 사용되므로 PlayerPrefs에 저장하는 것이 좋습니다. 게임이 시작되면 설정을 불러와 컨트롤에 적용해 설정 화면에 표시하고, 게임에도 적용합니다. 플레이어가 컨트롤을 변경하면 새 값을 적용하고 저장합니다. 이 토글(using UnityEngine.UI;)은 화면 타이머를 표시하거나 숨기며, PlayerPrefs에는 bool이 없으므로 켜짐은 1, 꺼짐은 0으로 저장합니다:
public Toggle timerToggle;
public GameObject timerText;
void Start()
{
bool show = PlayerPrefs.GetInt("ShowTimer", 1) == 1;
timerToggle.isOn = show;
timerText.SetActive(show);
timerToggle.onValueChanged.AddListener(OnTimerToggled);
}
void OnTimerToggled(bool on)
{
timerText.SetActive(on);
PlayerPrefs.SetInt("ShowTimer", on ? 1 : 0);
PlayerPrefs.Save();
}onValueChanged는 컨트롤의 새 값을 리스너에 전달합니다. Toggle의 경우 bool이고, Slider의 경우 float이며, 위치는 slider.value입니다. 코드에서 isOn 또는 value를 설정하면 플레이어가 직접 조작한 것처럼 컨트롤이 변경되므로 값이 바뀌면 리스너도 호출됩니다. 그래서 값을 불러온 다음 리스너를 추가합니다. 먼저 추가하면 시작할 때마다 실행되어 불러온 값을 그대로 다시 저장하게 됩니다. SetIsOnWithoutNotify와 SetValueWithoutNotify는 리스너를 호출하지 않고 컨트롤을 설정합니다.
기본값에 따라 새 플레이어에게 표시되는 값이 결정됩니다. GetInt("ShowTimer", 1)은 플레이어가 타이머를 끌 때까지 타이머를 표시합니다. 기본값이 0이면 설정을 한 번도 열지 않은 모든 플레이어에게 타이머가 숨겨집니다. 부동 소수점 설정도 PlayerPrefs.GetFloat(key, defaultValue)를 사용해 같은 방식으로 불러옵니다. GetFloat("MouseSensitivity", 1.5f)는 새 플레이어에게 1.5를 지정합니다.
챌린지
중급설정 화면에는 0부터 1까지 조절할 수 있는 볼륨 슬라이더와 볼륨을 백분율로 표시하는 텍스트가 있습니다. 볼륨을 Volume 키로 저장되는 설정으로 만드세요.
- 새 플레이어는 0.8로 시작하며, Volume: 80%로 표시됩니다.
- 볼륨은
AudioListener.volume을 통해 게임 전체에 적용됩니다. Unity의 마스터 볼륨은 0(무음)부터 1(최대)까지이며, 게임의 모든 사운드 크기를 조절합니다. - 게임이 시작되면 저장된 볼륨이 적용되고 슬라이더와 텍스트에 표시됩니다.
- 플레이어가 슬라이더를 움직이면 새 볼륨이 적용되고, 텍스트가 이에 맞춰 바뀌며 볼륨이 저장됩니다.
ShowVolume(float volume)은 이미 텍스트를 표시합니다.
Play를 누르고 슬라이더를 움직인 다음, Stop을 누르고 다시 Play를 누른 뒤 Check를 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// 저장된 볼륨을 불러와 적용하고 표시한 다음, 슬라이더의 변경을 감지합니다
}
void OnVolumeChanged(float value)
{
// 새 볼륨을 적용하고 표시한 다음 저장합니다
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.