Menu
CoddyTech

Uno script gestisce il gioco

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 12 di 60.

Metti il punteggio nello script del giocatore, le vite in uno script per la salute e il controllo di fine partita in un terzo script: ogni script ha bisogno dei numeri degli altri, quindi ogni nuova regola coinvolge più file. Nei giochi Unity, di solito si assegnano quei numeri a un unico script, il GameManager, su un GameObject vuoto dedicato. Questo gestisce il punteggio, le vite e la regola che termina la partita. Gli altri script si limitano a segnalare ciò che è successo, chiamando i suoi metodi pubblici. In questo tiro di rigore, la rete segnala ogni gol:

public class GameManager : MonoBehaviour
{
    private int goals;
    private int shotsLeft = 5;

    public void ShotTaken(bool scored)
    {
        if (shotsLeft == 0) return;
        shotsLeft--;
        if (scored) goals++;
        Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
        if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
    }
}
// Net.cs, sul trigger della porta
public GameManager game;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball")) game.ShotTaken(true);
}

La rete non sa quanti tiri restano né quando finisce la partita. Segnala un gol e il manager decide cosa significa; lo script del portiere segnala una parata con game.ShotTaken(false). Per un tiro di rigore con 3 tiri, cambi un solo numero in un solo script. Il controllo all'inizio di ShotTaken impedisce che una palla che entra rotolando dopo il fischio finale venga conteggiata.

Compili il campo game nell'Inspector trascinandoci sopra l'oggetto GameManager: Unity trova lo script GameManager su quell'oggetto. Il manager è anche il punto in cui gestire l'HUD: quando contiene il testo del punteggio e il pannello di fine partita, lo schermo cambia nello stesso metodo che modifica i numeri e nessun altro script tocca l'interfaccia utente.

challenge icon

Sfida

Facile

Fai gestire il punteggio e le vite a GameManager.

  1. AddScore(int points): se gameOver è falso, aggiungi punti a score e mostra Score: 6 in scoreText.
  2. LoseLife(): sottrai 1 a lives e mostra Lives: 2; quando arriva a 0, imposta gameOver, mostra gameOverPanel e imposta player.enabled = false.
  3. In Gem e Bomb, quando other.CompareTag("Player"), chiama game.AddScore(points) oppure game.LoseLife(), poi Destroy(gameObject).

Premi «Gioca» e colpisci tre bombe. Poi premi «Verifica».

Provalo tu

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text livesText;
    public GameObject gameOverPanel;
    public Player player;
    private int score;
    private int lives = 3;
    private bool gameOver;

    public void AddScore(int points)
    {
        // aggiungi i punti e mostra il nuovo punteggio, a meno che la partita non sia finita
    }

    public void LoseLife()
    {
        // togli una vita e mostra quante ne restano; a 0 vite la partita è finita
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity