Сохранение числа
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 22 из 56.
При запуске игры каждое поле получает значение по умолчанию. Игрок, собравший 40 самоцветов, выйдя из игры и вернувшись завтра, обнаружит, что количество самоцветов равно 0, потому что выход завершает игру и всё, что в ней есть. PlayerPrefs хранит небольшие значения на устройстве игрока между игровыми сессиями. Каждое значение сохраняется под ключом — выбранной вами строкой — с помощью SetInt, SetFloat или SetString:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Чтобы прочитать значение, вызовите Get того же типа с тем же ключом. При чтении ключа, который никогда не сохранялся, возвращается 0, 0 или пустая строка, поэтому при первой игре игрока это приветствие показывает пустое имя и уровень 0:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}Ключи чувствительны к регистру: GetInt("levelreached") считывает ключ, который никогда не сохранялся, и возвращает 0. Для ключа используется один тип, поэтому считывайте его с помощью Get, соответствующего его Set. Сохраняйте значение при его изменении, а не только при завершении игры. Unity записывает PlayerPrefs на диск при обычном выходе из игры, а PlayerPrefs.Save() записывает их сразу, поэтому сбой не приведёт к их потере. Поле static здесь не поможет: оно существует, пока игра запущена, а выход завершает и её.
Задание
СреднеJumpCounter у Hopper считает прыжки на экране, но счётчик — обычное поле, поэтому каждая новая игра начинается с Jumps: 0. Сделай его общим счётчиком, который сохраняется между играми:
- После каждого прыжка сохраняй
jumpsс помощьюPlayerPrefs.SetIntпод ключомTotalJumpsи записывай его на диск с помощьюPlayerPrefs.Save(). - В
Start()загрузи сохранённое общее значение вjumps, прежде чем текст отобразит его.
Нажми Play и попрыгай несколько раз, затем нажми Stop и снова Play: счёт продолжится. Затем нажми Check.
Попробуйте сами
using UnityEngine;
using TMPro;
public class JumpCounter : MonoBehaviour
{
public TMP_Text jumpsText;
public float hop = 5f;
private Rigidbody rb;
private int jumps;
void Start()
{
rb = GetComponent<Rigidbody>();
ShowJumps();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.linearVelocity = Vector3.up * hop;
jumps++;
ShowJumps();
}
}
void ShowJumps()
{
jumpsText.text = "Jumps: " + jumps;
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке