Menu
CoddyTech

Miglior corsa

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 32 di 56.

challenge icon

Sfida

Medio

Ultimo passaggio: ricorda la migliore corsa. Mantieni tutto ciò che hai realizzato nelle lezioni precedenti. La canvas ha un BestText in alto a destra e il pannello ha un NewBestText nascosto (New best!); la scena li inserisce in due nuovi campi di GameManager, public TMP_Text bestText; e public GameObject newBestText;. Salva il record con la chiave BestRun, in metri interi:

  • In Start(), carica il record (0 per un nuovo giocatore) e visualizzalo come Best: 57 m.
  • In GameOver(), quando i metri interi della corsa, Mathf.FloorToInt(distance), superano il record, salva il nuovo record, visualizzalo e mostra newBestText. Una corsa più breve non cambia nulla.

Il record viene mantenuto anche quando scegli Run again e quando esci dal gioco. Premi Play, stabilisci un record e prova a batterlo, poi premi Check.

Provalo tu

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);
    }
}

Tutte le lezioni di Creare veri giochi