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.
Sfida
FacileUna 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 ascoree li mostra inscoreText, comeScore: 6.LoseLife()sottrae 1 alives(3 all'inizio) e lo mostra inlivesText, comeLives: 2.- Quando
livesraggiunge 0, la partita è finita: mostragameOverPanele disattiva lo script del Player, così le frecce smettono di funzionare. Dopodiché,AddScorenon 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
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti 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: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input