Menu
CoddyTech

Загрузка со значением по умолчанию

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

challenge icon

Задание

Средне

Игровой автомат хранит кредиты игрока под ключом 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;
    }
}
quiz iconПроверьте себя

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

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