Сохранение настроек
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 25 из 60.
Настройку выбирают один раз и ожидают, что она сохранится во всех последующих запусках игры, поэтому её нужно хранить в 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 для Toggle и 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 (максимум), которая регулирует громкость всех звуков в игре.
Задание
СреднеСделай так, чтобы положение ползунка громкости сохранялось в настройке с ключом Volume.
- В
Start()загрузиPlayerPrefs.GetFloat("Volume", 0.8f), присвой это значениеslider.valueиAudioListener.volume, а затем вызовиShowVolume. - Затем добавь
slider.onValueChanged.AddListener(OnVolumeChanged);. - В
OnVolumeChangedприсвойvalueсвойствуAudioListener.volume, отобрази его и сохрани с помощьюPlayerPrefs.SetFloatиPlayerPrefs.Save().
Нажми «Играть» и передвинь ползунок, затем нажми Stop и «Играть»: ползунок останется там, где ты его оставил. Затем нажми «Проверить».
Попробуйте сами
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) + "%";
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity