Загрузка со значением по умолчанию
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 23 из 56.
Ключ, который никогда не сохранялся, при чтении возвращает 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.
Задание
СреднеИгровой автомат хранит кредиты игрока под ключом Credits: нажатие Space запускает игру за один кредит, а оставшиеся кредиты сохраняются после каждой игры. Для новых игроков пока не предусмотрена обработка:
- Игрок, у которого ничего не сохранено, начинает с 5 бесплатными кредитами. У игрока, который потратил все кредиты, сохранено значение 0, поэтому он начинает с 0, а не с 5.
- Объект
welcomeText(Welcome! Here are 5 free credits) показывается только игроку, у которого не сохранено значениеCredits. Остальные игроки его не видят.
Нажми Play и сыграй в игру, затем нажми Stop, а потом снова Play: приветствие исчезло. Затем нажми Check.
Попробуйте сами
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Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке