Menu
CoddyTech

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

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 23 из 60.

Ключ, который ни разу не сохраняли, считывается как 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

Задание

Средне

Дайте новому игроку 5 бесплатных кредитов и приветственное сообщение.

  1. В Start() загрузите значение с настройкой по умолчанию: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Замените welcomeText.SetActive(false); на welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

Нажмите «Играть» и сыграйте в игру, затем нажмите Stop и «Играть»: приветственное сообщение исчезнет. Затем нажмите «Проверить».

Попробуйте сами

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;
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity