Menu
CoddyTech

Сохранение числа

Часть раздела Создание настоящих игр путешествия по 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 здесь не поможет: оно существует, пока игра запущена, а выход завершает и её.

challenge icon

Задание

Средне

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;
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Создание настоящих игр