Menu
CoddyTech

Wczytywanie z wartością domyślną

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 23 z 60.

Klucz, który nigdy nie został zapisany, odczytuje się jako 0, a 0 to kiepska wartość początkowa dla niektórych wartości. Gra wyścigowa pozwala graczowi wybrać, ilu komputerowych rywali weźmie udział w wyścigu, a nowy gracz powinien ścigać się z 3 rywalami. Każde wywołanie Get przyjmuje drugi argument, wartość domyślną, którą zwraca, gdy brakuje klucza:

int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");

Gdy gracz zapisze 0 rywali, aby ćwiczyć w pojedynkę, GetInt("Rivals", 3) zwróci 0: wartość domyślna uzupełnia tylko brakujący klucz. Dlatego if (rivals == 0) rivals = 3; to niewłaściwy sposób ustawiania wartości domyślnej. Nie potrafi odróżnić zapisanego 0 od braku zapisu i przywraca 3 rywali w każdym wyścigu treningowym.

PlayerPrefs.HasKey(key) informuje, czy klucz został kiedykolwiek zapisany, niezależnie od jego wartości, dzięki czemu pozwala odróżnić pierwszą rozgrywkę od kolejnej. Ta gra wita nowego kierowcę:

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

Sprawdź HasKey przed jakimkolwiek kodem zapisującym klucz: od pierwszego zapisu zwraca ono true, dopóki klucz nie zostanie usunięty za pomocą PlayerPrefs.DeleteKey.

challenge icon

Wyzwanie

Średni

Przyznaj nowemu graczowi 5 darmowych żetonów i wyświetl powitanie.

  1. W Start() wczytaj wartość z domyślną: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Zastąp welcomeText.SetActive(false); przez welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

Naciśnij „Graj” i zagraj w grę, a następnie naciśnij Stop i „Graj”: powitanie zniknie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier

Poćwicz samodzielnie: Edytor online Unity