Rejouer
Leçon 12 sur 14 du cours Jeu Unity : Snake 3D de Coddy.
Lorsque le serpent meurt, un panneau Game Over apparaît avec un bouton Play Again. Le panneau se trouve dans le HUD et est masqué au départ ; SetActive(true) l’affiche. Le serpent sait quand il meurt, et GameManager gère les écrans, donc Die() appelle une méthode publique GameOver() sur GameManager.
Play Again recommence en chargeant à nouveau la scène. Chaque objet revient dans l’état défini par la scène : le serpent sur sa première case avec deux segments, le score à 0, le panneau masqué. Le bouton Retry d’un jeu de course fonctionne de la même manière :
void Start()
{
retryButton.onClick.AddListener(Retry);
}
void Retry()
{
SceneManager.LoadScene("Track1");
}Le chargement par nom associe le bouton à une seule scène. SceneManager.GetActiveScene().buildIndex correspond à la scène en cours d’exécution ; la charger redémarre donc la scène dans laquelle se trouve le bouton. La nouvelle scène contient un nouveau GameManager, dont Awake() définit à nouveau Instance ; le nouveau serpent communique donc avec le nouveau GameManager.
Défi
MoyenLe HUD comporte un GameOverPanel masqué avec un PlayAgainButton, et la scène définit les deux dans GameManager.
- Dans
GameManager, ajouteusing UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;etpublic Button playAgainButton;. - Écris
public void GameOver(), qui affiche le panneau. - Écris
void PlayAgain(), qui recharge la scène active, puis dansStart(), fais en sorte que le bouton l’appelle. - Dans
Die()deSnake, appelleGameOver().
Appuie sur Play, percute un obstacle, rejoue, puis appuie sur Check.
Essayez vous-même
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)];
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.