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.
Wyzwanie
ŚredniAutomat 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 zapisanoCredits. 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;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku