Najlepszy wynik
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 24 z 60.
Najwyższy wynik to najlepszy rezultat ze wszystkich rozegranych gier, więc jest przechowywany w PlayerPrefs i zmienia się tylko wtedy, gdy wynik w grze go pobije. Ten stół do pinballa sprawdza wynik, gdy ostatnia kula wpadnie do odpływu:
void GameOver()
{
int best = PlayerPrefs.GetInt("PinballBest", 0);
if (score > best)
{
PlayerPrefs.SetInt("PinballBest", score);
PlayerPrefs.Save();
Debug.Log("New high score: " + score);
}
}To porównanie sprawia, że wynik jest najwyższym wynikiem. Bez niego gra zakończona wynikiem 300 po wcześniejszym rekordzie wynoszącym 5000 zapisałaby 300, a rekord by przepadł. Porównuj wynik z zapisanym rekordem, a nie z wartością, która w każdej grze zaczyna się od 0: pole, do którego niczego nie wczytano, ma wartość 0 po każdym ponownym uruchomieniu, więc każdy wynik je pobije. score > best zachowuje dotychczasowy rekord przy remisie, a score >= best uznałoby remis za nowy najwyższy wynik.
Aby wyświetlać najwyższy wynik podczas gry, wczytaj go do pola w Start() i wyświetl tę wartość. Gdy gra pobije rekord, zaktualizuj jednocześnie pole, PlayerPrefs i tekst, aby wartość na ekranie zawsze zgadzała się z zapisaną.
Wyzwanie
ŚredniZapisz najwyższy wynik pod kluczem BestPoints.
- W metodzie
Start(), przedShowBest();, wpiszbest = PlayerPrefs.GetInt("BestPoints", 0);. - W metodzie
EndRound(), wewnątrzif (points > best): ustawbest = points;, zapisz wynik za pomocąPlayerPrefs.SetIntiPlayerPrefs.Save(), a następnie wywołajShowBest();inewBestText.SetActive(true);.
Naciśnij „Graj” i napompuj balon (przytrzymaj spację, a potem ją puść), następnie naciśnij „Stop” i „Graj”: najwyższy wynik pozostanie zapisany. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
using TMPro;
public class BalloonPump : MonoBehaviour
{
public TMP_Text pointsText;
public TMP_Text bestText;
public GameObject newBestText;
public float pumpRate = 20f;
private float air;
private int points;
private int best;
private bool roundOver;
void Start()
{
ShowBest();
}
void Update()
{
if (roundOver) return;
if (Input.GetKey(KeyCode.Space))
{
air += pumpRate * Time.deltaTime;
transform.localScale = Vector3.one * (1f + air / 50f);
pointsText.text = "Points: " + Mathf.FloorToInt(air);
if (air > 100f)
{
points = 0;
pointsText.text = "Pop! Points: 0";
GetComponent<Renderer>().enabled = false;
roundOver = true;
EndRound();
}
}
else if (Input.GetKeyUp(KeyCode.Space))
{
points = Mathf.FloorToInt(air);
pointsText.text = "Points: " + points;
roundOver = true;
EndRound();
}
}
void EndRound()
{
// Zapisz tutaj nowy rekord
}
void ShowBest()
{
bestText.text = "Best: " + best;
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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 bankuPoćwicz samodzielnie: Edytor online Unity