Menu
CoddyTech

La fin de la nuit

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 60 sur 60.

Le dernier défi permet de terminer un jeu complet : un gestionnaire avec des états, une pause qui arrête le temps, deux fins et un redémarrage qui réinitialise l’échelle de temps.

challenge icon

Défi

Difficile

Ajoute une pause, deux fins et un redémarrage.

  1. pauseButton bascule uniquement entre Playing et Paused : Paused règle Time.timeScale sur 0 et affiche pausePanel, tandis que Playing annule ces deux effets.
  2. À 0 seconde, la nuit est Won. En cas de victoire ou de défaite : l’échelle de temps est réglée sur 0, endPanel s’affiche avec You survived the night! ou The bats got you dans endText.
  3. restartButton règle l’échelle de temps sur 1 et recharge la scène.

Appuie sur « Jouer », mets en pause, perds, puis rejoue. Ensuite, appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

    void Update()
    {
        if (state != State.Playing) return;

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Créer de vrais jeux

Entraînez-vous par vous-même : Playground Unity