Menu
CoddyTech

Melhor Corrida

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 32 de 56.

challenge icon

Desafio

Médio

Última etapa: lembre-se da melhor corrida. Mantenha tudo das lições anteriores. O canvas tem um BestText no canto superior direito, e o painel tem um NewBestText oculto (Novo recorde!); a cena os coloca em dois novos campos de GameManager, public TMP_Text bestText; e public GameObject newBestText;. Salve o melhor resultado usando a chave BestRun, em metros inteiros:

  • Em Start(), carregue o melhor resultado (0 para um jogador novo) e exiba-o como Best: 57 m.
  • Em GameOver(), quando os metros inteiros da corrida, Mathf.FloorToInt(distance), superarem o melhor resultado, salve o novo melhor resultado, exiba-o e mostre newBestText. Uma corrida mais curta não altera nada.

O melhor resultado permanece ao jogar novamente e ao sair do jogo. Pressione Play, estabeleça um melhor resultado e tente superá-lo; depois, pressione Check.

Experimente você mesmo

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public enum GameState { Playing, GameOver }

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public float speed = 10f;
    public float speedUp = 0.5f;
    public float maxSpeed = 20f;
    public TMP_Text distanceText;
    public GameObject gameOverPanel;
    public Button restartButton;
    public GameState state = GameState.Playing;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        restartButton.onClick.AddListener(Restart);
    }

    void Update()
    {
        if (state != GameState.Playing) return;

        speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
        distance += speed * Time.deltaTime;
        distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
    }

    public void GameOver()
    {
        state = GameState.GameOver;
        speed = 0f;
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

Todas as lições de Criando jogos de verdade