Menu
CoddyTech

Uno script gestisce il gioco

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

Metti il punteggio nello script del giocatore, le vite in uno script della salute e il controllo di fine partita in un terzo script: ogni script ha bisogno dei numeri degli altri, quindi ogni nuova regola coinvolge diversi file. Di solito, nei giochi Unity, quei numeri vengono affidati a uno script, il GameManager, associato a un GameObject vuoto dedicato. Gestisce il punteggio, le vite e la regola che termina la partita. Gli altri script si limitano a comunicare ciò che è successo, chiamando i suoi metodi pubblici. In questa serie di tiri 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 gestore decide cosa significa; lo script del portiere segnala una parata con game.ShotTaken(false). Per una serie di 3 tiri, basta modificare un numero in un solo script. Il controllo all'inizio di ShotTaken impedisce che venga conteggiata una palla che entra in rete dopo il fischio finale.

Compili il campo game nell'Inspector trascinandoci sopra l'oggetto GameManager; Unity trova lo script GameManager su quell'oggetto. Il gestore è anche il posto giusto per l'HUD: quando contiene il testo del punteggio e il pannello di fine partita, lo schermo si aggiorna nello stesso metodo che modifica i numeri e nessun altro script interviene sull'interfaccia.

challenge icon

Sfida

Facile

Una caccia alle gemme. Le frecce fanno camminare il Player (il suo script è pronto). Le gemme valgono i loro points, le bombe costano una vita e un GameManager gestisce tutto. Nell'Inspector sono già collegati i campi game di ogni gemma e bomba all'oggetto GameManager, e i campi del GameManager all'HUD e al Player.

In GameManager.cs:

  • AddScore(int points) aggiunge i punti a score e li mostra in scoreText, come Score: 6.
  • LoseLife() sottrae 1 a lives (3 all'inizio) e lo mostra in livesText, come Lives: 2.
  • Quando lives raggiunge 0, la partita è finita: mostra gameOverPanel e disattiva lo script del Player, così le frecce smettono di funzionare. Dopodiché, AddScore non cambia nulla.

In Gem.cs e Bomb.cs: quando il Player (con il tag Player) ne tocca uno, lo comunica al gioco (una gemma comunica i suoi points, una bomba una vita persa) e si rimuove.

Premi Play, raccogli le gemme e colpisci le bombe, poi premi Check.

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 il numero di vite rimaste; a 0 vite la partita è finita
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi