Menu
CoddyTech

설정 저장하기

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 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의 위치는 slider.value입니다. 코드에서 isOn이나 value를 설정하면 플레이어가 직접 조작한 것처럼 컨트롤이 변경되므로, 값이 바뀔 때 리스너도 호출됩니다. 그래서 불러오기가 끝난 뒤 리스너를 추가합니다. 먼저 추가하면 시작할 때마다 실행되어 불러온 값을 그대로 다시 저장하게 됩니다. SetIsOnWithoutNotify와 SetValueWithoutNotify는 리스너를 호출하지 않고 컨트롤 값을 설정합니다.

기본값에 따라 새 플레이어가 어떤 설정을 받는지가 결정됩니다. GetInt("ShowTimer", 1)은 플레이어가 타이머를 끌 때까지 타이머를 표시합니다. 기본값이 0이면 설정을 한 번도 열지 않은 모든 플레이어에게 타이머가 숨겨집니다. float 설정도 같은 방식으로 불러옵니다. PlayerPrefs.GetFloat(key, defaultValue)를 사용하면 됩니다. GetFloat("MouseSensitivity", 1.5f)는 새 플레이어에게 1.5를 설정합니다. 볼륨 설정은 AudioListener.volume에 적용합니다. 이는 Unity의 마스터 볼륨으로, 0(음소거)부터 1(최대)까지 설정되며 게임의 모든 소리 크기를 조절합니다.

challenge icon

챌린지

중급

볼륨 슬라이더의 설정을 Volume 키로 저장하세요.

  1. Start()에서 PlayerPrefs.GetFloat("Volume", 0.8f)을 불러와 slider.value와 AudioListener.volume에 설정하고 ShowVolume을 호출하세요.
  2. 그런 다음 slider.onValueChanged.AddListener(OnVolumeChanged);를 추가하세요.
  3. OnVolumeChanged에서 value를 AudioListener.volume에 적용하고, 표시한 다음 PlayerPrefs.SetFloat과 PlayerPrefs.Save()로 저장하세요.

‘플레이’를 누르고 슬라이더를 움직인 다음, 중지하고 ‘플레이’를 누르세요. 슬라이더가 마지막에 설정한 위치에 그대로 있습니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class VolumeSetting : MonoBehaviour
{
    public Slider slider;
    public TMP_Text volumeText;

    void Start()
    {
        // 저장된 볼륨을 불러와 적용하고 표시한 다음, slider의 변경을 감지합니다
    }

    void OnVolumeChanged(float value)
    {
        // 새 볼륨을 적용하고 표시한 뒤 저장합니다
    }

    void ShowVolume(float volume)
    {
        volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
    }
}

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드