Menu
CoddyTech

Schianto e ripartenza

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

challenge icon

Sfida

Medio

Un incidente termina la corsa e un pulsante ne avvia un'altra. Mantieni tutto quello delle lezioni precedenti. Il canvas contiene un GameOverPanel nascosto con un RestartButton con l'etichetta Run again, e la scena riempie due nuovi campi di GameManager, gameOverPanel e restartButton. Il Runner ha un Rigidbody cinematico, quindi riceve messaggi di trigger dagli ostacoli.

In GameManager:

  • Sopra la classe, dichiara public enum GameState { Playing, GameOver } e aggiungi alla classe un campo public GameState state che inizialmente vale Playing.
  • Aggiungi using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; e public Button restartButton;.
  • Un metodo pubblico GameOver() imposta state su GameOver, imposta speed su 0, fermando così ogni ostacolo, e mostra il pannello.
  • Update() non fa nulla se lo stato non è Playing, così la velocità e la distanza si fermano.
  • In Start(), fai in modo che restartButton ricarichi la scena in corso.

In Runner: quando entra in un trigger con il tag Obstacle, chiama GameManager.Instance.GameOver(). Se lo stato non è Playing, le frecce non fanno nulla.

In Spawner: non generare nulla se lo stato non è Playing.

Premi Play, schiantati e ricomincia, poi premi Check.

Provalo tu

using UnityEngine;
using TMPro;

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;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

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

Tutte le lezioni di Creare veri giochi