Gioca ancora
Lezione 12 di 14 del corso Gioco Unity: Snake 3D di Coddy.
Quando il serpente muore, appare un pannello Game Over con un pulsante Gioca di nuovo. Il pannello si trova nell'HUD e all'inizio è nascosto, e SetActive(true) lo mostra. Il serpente sa quando muore e il GameManager gestisce le schermate, quindi Die() chiama un metodo pubblico GameOver() sul GameManager.
Gioca di nuovo ricomincia caricando di nuovo la scena. Ogni oggetto torna nello stato in cui si trova nella scena: il serpente nella sua prima cella con due segmenti, il punteggio a 0, il pannello nascosto. Il pulsante Riprova di un gioco di corse è collegato allo stesso modo:
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}Caricare per nome collega il pulsante a una sola scena. SceneManager.GetActiveScene().buildIndex è la scena in esecuzione, quindi caricarla riavvia la scena in cui si trova il pulsante. La nuova scena ha un nuovo GameManager, il cui Awake() imposta di nuovo Instance, così il nuovo serpente comunica con il nuovo GameManager.
Sfida
MedioQuando il serpente muore, viene mostrato un pannello di fine partita e «Gioca di nuovo» avvia una nuova partita.
- In
GameManager, aggiungiusing UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;epublic Button playAgainButton; public void GameOver()mostra il pannello;void PlayAgain()ricarica la scena attiva e Start() aggiunge un listener aplayAgainButton.onClick.Die()diSnakechiamaGameManager.Instance.GameOver().
Premi Gioca, urta un ostacolo e fai clic su Gioca di nuovo: inizia una nuova partita. Poi premi Verifica.
Provalo tu
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Snake snake;
public GameObject foodPrefab;
public TMP_Text scoreText;
private Transform food;
private int score;
void Awake()
{
Instance = this;
}
void Start()
{
scoreText.text = "Score: 0";
food = Instantiate(foodPrefab).transform;
MoveFood();
}
public bool IsFood(Vector3 cell)
{
return cell == food.position;
}
public void Eat()
{
score++;
scoreText.text = "Score: " + score;
MoveFood();
}
void MoveFood()
{
List<Vector3> free = new List<Vector3>();
for (int x = -snake.edge; x <= snake.edge; x++)
{
for (int z = -snake.edge; z <= snake.edge; z++)
{
Vector3 cell = new Vector3(x, 0f, z);
if (!snake.Occupies(cell))
{
free.Add(cell);
}
}
}
food.position = free[Random.Range(0, free.Count)];
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gioco Unity: Snake 3D
Esercitati da solo: Playground Unity