Menu
CoddyTech

Wczytywanie z wartością domyślną

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

Klucz, który nigdy nie został zapisany, zwraca 0, a 0 to kiepska wartość początkowa dla niektórych wartości. W grze wyścigowej gracz wybiera, ilu komputerowych rywali bierze udział w wyścigu, a nowy gracz powinien ścigać się z 3 rywalami. Każda metoda 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) zwraca 0: wartość domyślna jest używana tylko wtedy, gdy brakuje klucza. Dlatego if (rivals == 0) rivals = 3; to niewłaściwy sposób ustawiania wartości domyślnej. Nie odróżnia zapisanej wartości 0 od braku zapisu i przywraca 3 rywali w każdym wyścigu treningowym.

PlayerPrefs.HasKey(key) informuje, czy klucz kiedykolwiek został zapisany, niezależnie od jego wartości, dzięki czemu pozwala odróżnić pierwszą grę 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 dowolnym kodem, który zapisuje klucz: od pierwszego zapisu metoda zwraca true, dopóki klucz nie zostanie usunięty za pomocą PlayerPrefs.DeleteKey.

challenge icon

Wyzwanie

Średni

Automat do gier przechowuje kredyty gracza pod kluczem Credits: spacja uruchamia grę za jeden kredyt, a pozostałe kredyty są zapisywane po każdej grze. Obsługa nowych graczy nie jest jeszcze zaimplementowana:

  • Gracz, dla którego nic nie zapisano, zaczyna z 5 darmowymi kredytami. Gracz, który wykorzystał wszystkie kredyty, ma zapisane 0 i zaczyna z 0, a nie z 5.
  • Obiekt welcomeText (Witamy! Oto 5 darmowych kredytów) jest wyświetlany tylko graczowi, dla którego nie zapisano Credits. Pozostali gracze go nie widzą.

Naciśnij Play i zagraj, a następnie naciśnij Stop i ponownie Play: powitanie zniknie. Następnie naciśnij Check.

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;
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier