Сохранение числа
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 22 из 60.
Каждое поле при запуске игры получает значение по умолчанию. Игрок, который собрал 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 не поможет обойти это ограничение: оно существует, пока запущена игра, а при выходе она тоже завершается.
Задание
СреднеСделай счётчик прыжков общим за всё время и сохраняй его между игровыми сессиями.
- В
Update(), послеjumps++;, добавьPlayerPrefs.SetInt("TotalJumps", jumps);иPlayerPrefs.Save();. - В
Start(), передShowJumps();, загрузи значение:jumps = PlayerPrefs.GetInt("TotalJumps");.
Нажми «Играть» и попрыгай, затем нажми «Стоп» и снова «Играть»: счёт продолжится. Затем нажми «Проверить».
Попробуйте сами
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Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity