Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Klasa 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 jumps za pomocą PlayerPrefs.SetInt pod kluczem TotalJumps i zapisz dane na dysku za pomocą PlayerPrefs.Save().
  • W Start() wczytaj zapisaną łączną liczbę do jumps, 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;
    }
}
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