Загрузка со значением по умолчанию
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 23 из 60.
Ключ, который ни разу не сохраняли, считывается как 0, а 0 — неудачное начальное значение для некоторых величин. В гоночной игре игрок выбирает, сколько компьютерных соперников будет участвовать в гонке, и новому игроку предстоит гоняться против 3 соперников. Каждый вызов Get принимает второй аргумент — значение по умолчанию, которое он возвращает, если ключ отсутствует:
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");Когда игрок сохраняет 0 соперников, чтобы тренироваться в одиночку, GetInt("Rivals", 3) возвращает 0: значение по умолчанию подставляется только для отсутствующего ключа. Поэтому if (rivals == 0) rivals = 3; — неправильный способ задать значение по умолчанию. Такой код не отличает сохранённый 0 от отсутствующего сохранения и возвращает 3 соперников в каждую тренировочную гонку.
PlayerPrefs.HasKey(key) сообщает, сохранялся ли ключ когда-либо, независимо от его значения, поэтому позволяет отличить первую игру от последующих. Эта игра приветствует нового гонщика:
void Start()
{
if (!PlayerPrefs.HasKey("Driver"))
{
Debug.Log("First race! Pick a name in the garage.");
}
string driver = PlayerPrefs.GetString("Driver", "Rookie");
Debug.Log("Driver: " + driver);
}Проверяй HasKey до любого кода, сохраняющего ключ: начиная с первого сохранения, он возвращает true, пока ключ не будет удалён с помощью PlayerPrefs.DeleteKey.
Задание
СреднеДайте новому игроку 5 бесплатных кредитов и приветственное сообщение.
- В
Start()загрузите значение с настройкой по умолчанию:credits = PlayerPrefs.GetInt("Credits", 5);. - Замените
welcomeText.SetActive(false);наwelcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.
Нажмите «Играть» и сыграйте в игру, затем нажмите Stop и «Играть»: приветственное сообщение исчезнет. Затем нажмите «Проверить».
Попробуйте сами
using UnityEngine;
using TMPro;
public class ArcadeCredits : MonoBehaviour
{
public TMP_Text creditsText;
public GameObject welcomeText;
private int credits;
void Start()
{
credits = PlayerPrefs.GetInt("Credits");
welcomeText.SetActive(false);
ShowCredits();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
{
credits--;
PlayerPrefs.SetInt("Credits", credits);
PlayerPrefs.Save();
ShowCredits();
}
}
void ShowCredits()
{
creditsText.text = "Credits: " + credits;
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity