Menu
CoddyTech

Сохранение настроек

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 25 из 56.

Настройка выбирается один раз, и ожидается, что она сохранится в каждой последующей игре, поэтому её следует хранить в 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 передаёт слушателю новое значение элемента управления: bool для переключателя и float для ползунка, чьё положение задаётся через slider.value. Установка isOn или value из кода меняет элемент управления так же, как это делает игрок, поэтому при изменении значения вызываются и слушатели. Поэтому слушатель добавляется после загрузки: если добавить его раньше, он будет срабатывать при каждом запуске и сразу же сохранять загруженное значение обратно. SetIsOnWithoutNotify и SetValueWithoutNotify устанавливают значение элемента управления, не вызывая слушателей.

Значение по умолчанию определяет, что получит новый игрок. GetInt("ShowTimer", 1) показывает таймер, пока игрок его не выключит; значение по умолчанию 0 скрыло бы его от всех, кто ни разу не открывал настройки. Настройка типа float загружается аналогично с помощью PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) задаёт новому игроку значение 1.5.

challenge icon

Задание

Средне

На экране настроек есть ползунок громкости от 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()
    {
        // Загрузить сохранённую громкость, применить и отобразить её, затем отслеживать изменения slider
    }

    void OnVolumeChanged(float value)
    {
        // Применить, отобразить и сохранить новую громкость
    }

    void ShowVolume(float volume)
    {
        volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр