Zapisz liczbę
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 22 z 56.
Każde pole przyjmuje swoją wartość domyślną po uruchomieniu gry. Gracz, który zbierze 40 klejnotów, wyjdzie z gry i wróci następnego dnia, zobaczy liczbę klejnotów równą 0, ponieważ wyjście kończy grę i wszystko, co się w niej znajduje. PlayerPrefs przechowuje niewielkie wartości na urządzeniu gracza między rozgrywkami. Każda wartość jest przechowywana pod kluczem — wybranym przez ciebie ciągiem znaków — za pomocą SetInt, SetFloat lub SetString:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Aby odczytać wartość, wywołaj metodę Get tego samego typu z tym samym kluczem. Klucz, który nigdy nie został zapisany, jest odczytywany jako 0, 0 lub pusty ciąg znaków, więc przy pierwszej rozgrywce gracza to powitanie wyświetla puste imię i poziom 0:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}Wielkość liter w kluczach ma znaczenie: GetInt("levelreached") odczytuje klucz, który nigdy nie został zapisany, i zwraca 0. Klucz przechowuje jedną wartość określonego typu, więc odczytuj ją za pomocą metody Get odpowiadającej metodzie Set, której użyto do zapisu. Zapisuj wartość, gdy się zmienia, a nie dopiero po zakończeniu gry. Unity zapisuje PlayerPrefs na dysku, gdy gra zostaje normalnie zamknięta, a PlayerPrefs.Save() zapisuje je od razu, dzięki czemu awaria nie spowoduje ich utraty. Pole static nie rozwiąże tego problemu: istnieje tak długo, jak działa gra, a jej zamknięcie kończy również jego działanie.
Wyzwanie
ŚredniKlasa JumpCounter obiektu Hopper wyświetla liczbę jego skoków na ekranie, ale licznik jest zwykłym polem, więc każda nowa gra zaczyna się od Jumps: 0. Zmień go w łączną liczbę skoków, która zachowuje się między grami:
- Po każdym skoku zapisz
jumpsza pomocąPlayerPrefs.SetIntpod kluczemTotalJumpsi zapisz dane na dysku za pomocąPlayerPrefs.Save(). - W
Start()wczytaj zapisaną łączną liczbę dojumps, zanim zostanie wyświetlona.
Naciśnij Play i wykonaj kilka skoków, a następnie naciśnij Stop i ponownie Play: licznik będzie kontynuował liczenie. Następnie naciśnij Check.
Spróbuj swoich sił
using UnityEngine;
using TMPro;
public class JumpCounter : MonoBehaviour
{
public TMP_Text jumpsText;
public float hop = 5f;
private Rigidbody rb;
private int jumps;
void Start()
{
rb = GetComponent<Rigidbody>();
ShowJumps();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.linearVelocity = Vector3.up * hop;
jumps++;
ShowJumps();
}
}
void ShowJumps()
{
jumpsText.text = "Jumps: " + jumps;
}
}
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