Jogar novamente
Lição 12 de 14 do curso Jogo de Cobra 3D na Unity da Coddy.
Quando a cobra morre, aparece um painel de Game Over com um botão Jogar novamente. O painel fica no HUD e começa oculto, e SetActive(true) o exibe. A cobra sabe quando morre, e o GameManager controla as telas, então Die() chama um GameOver() público no GameManager.
Jogar novamente recomeça carregando a cena outra vez. Todos os objetos voltam como estavam na cena: a cobra em sua primeira célula com dois segmentos, a pontuação em 0, o painel oculto. O botão Tentar novamente de um jogo de corrida é conectado da mesma forma:
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}Carregar pelo nome vincula o botão a uma única cena. SceneManager.GetActiveScene().buildIndex é a cena que está em execução, então carregá-la reinicia qualquer que seja a cena em que o botão está. A nova cena tem um novo GameManager, cujo Awake() define Instance novamente, então a nova cobra se comunica com o novo GameManager.
Desafio
MédioO HUD tem um GameOverPanel oculto com um PlayAgainButton, e a cena define ambos em GameManager.
- Em
GameManager, adicioneusing UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;epublic Button playAgainButton;. - Escreva
public void GameOver(), que mostra o painel. - Escreva
void PlayAgain(), que carrega a cena ativa novamente, e, emStart(), faça o botão chamá-lo. - Em
Die()deSnake, chameGameOver().
Pressione Play, bata, jogue novamente e depois pressione Check.
Experimente você mesmo
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)];
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.