Рекорд
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 24 из 60.
Рекорд — это лучший результат во всех сыгранных играх, поэтому он хранится в PlayerPrefs и меняется, только когда новая игра побивает его. Этот пинбольный стол проверяет рекорд, когда последний шар покидает игровое поле:
void GameOver()
{
int best = PlayerPrefs.GetInt("PinballBest", 0);
if (score > best)
{
PlayerPrefs.SetInt("PinballBest", score);
PlayerPrefs.Save();
Debug.Log("New high score: " + score);
}
}Именно сравнение позволяет определить, побит ли рекорд. Без него результат 300 после рекорда 5000 сохранится, и рекорд будет потерян. Сравнивай результат с сохранённым рекордом, а не с переменной, которая в каждой игре начинается с 0: поле, в которое ничего не загрузили, после каждого перезапуска равно 0, поэтому любой результат его побьёт. score > best сохраняет старый рекорд при равенстве результатов, а score >= best сочло бы ничью новым рекордом.
Чтобы показывать рекорд во время игры, загрузи его в поле в Start() и отображай значение этого поля. Когда игра побьёт рекорд, обнови поле, PlayerPrefs и текст одновременно, чтобы отображаемый на экране результат всегда совпадал с сохранённым.
Задание
СреднеСохрани лучший результат под ключом BestPoints.
- В
Start(), передShowBest();, напишиbest = PlayerPrefs.GetInt("BestPoints", 0);. - В
EndRound(), внутриif (points > best): присвойbest = points;, сохрани его с помощьюPlayerPrefs.SetIntиPlayerPrefs.Save(), затем вызовиShowBest();иnewBestText.SetActive(true);.
Нажми «Играть» и надуй шарик (удерживай Space, отпусти), затем нажми «Остановить» и «Играть»: лучший результат сохранится. Затем нажми «Проверить».
Попробуйте сами
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()
{
// Сохраните здесь новый рекорд
}
void ShowBest()
{
bestText.text = "Best: " + best;
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity