Najlepszy wynik
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 24 z 56.
Najlepszy wynik to najlepszy rezultat ze wszystkich rozegranych gier, dlatego jest przechowywany w PlayerPrefs i zmienia się tylko wtedy, gdy gra przyniesie lepszy wynik. Ten stół do pinballa sprawdza wynik, gdy ostatnia kula wpada 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 jest to najlepszy wynik. Bez niego gra z wynikiem 300 po wcześniejszym najlepszym wyniku 5000 zapisałaby 300, a rekord zostałby utracony. Porównuj wynik z zapisanym najlepszym wynikiem, a nie z wartością, która zaczyna się od 0 w każdej grze: pole, do którego niczego nie wczytano, po każdym ponownym uruchomieniu ma wartość 0, więc każdy wynik będzie od niego lepszy. score > best zachowuje dotychczasowy rekord w przypadku remisu, natomiast score >= best uznałoby remis za nowy najlepszy wynik.
Aby wyświetlać najlepszy wynik podczas gry, wczytaj go do pola w Start() i wyświetl wartość tego pola. Gdy gra przyniesie lepszy wynik, zaktualizuj jednocześnie pole, PlayerPrefs i tekst, aby wartość na ekranie nigdy nie różniła się od zapisanej.
Wyzwanie
ŚredniBalonowa pompka: przytrzymaj spację, aby pompować powietrze do balonu, zdobywając 20 punktów na sekundę, a następnie puść, aby zatwierdzić punkty. Jeśli napompujesz balon powyżej 100, pęknie, a ty zdobędziesz 0 punktów. Pompowanie, pęknięcie i punkty są już obsługiwane, a po zakończeniu rundy EndRound() jest wywoływane raz, z wynikiem rundy w points. Dodaj rekord, zapisywany pod kluczem BestPoints:
- W
Start()wczytaj rekord dobest(0 dla nowego gracza), abyShowBest()go wyświetlało. - W
EndRound(), gdypointspobije rekord, zapisz go, wyświetl i pokażnewBestText. Runda, w której nie uda się pobić rekordu, niczego nie zmienia.
Naciśnij Play i napompuj kilka balonów (Stop, a następnie Play, aby rozpocząć nową rundę), a potem naciśnij Check.
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;
}
}
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