Сохранение настроек
Часть раздела Создание настоящих игр путешествия по 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.
Задание
СреднеНа экране настроек есть ползунок громкости от 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) + "%";
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке