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.
Sfida
FacileFai gestire il punteggio e le vite a GameManager.
AddScore(int points): segameOverè falso, aggiungi punti ascoree mostraScore: 6inscoreText.LoseLife(): sottrai 1 alivese mostraLives: 2; quando arriva a 0, impostagameOver, mostragameOverPanele impostaplayer.enabled = false.- In
GemeBomb, quandoother.CompareTag("Player"), chiamagame.AddScore(points)oppuregame.LoseLife(), poiDestroy(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
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity