Menu
CoddyTech

Redémarrer le niveau

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

Le moyen le plus rapide de réinitialiser un niveau est de le charger à nouveau. SceneManager.GetActiveScene() renvoie la scène actuellement ouverte, et son name (ou son buildIndex) est ce que prend LoadScene. Ce bouton Restart sur un panneau de fin de partie appelle :

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unity détruit la scène ouverte et la reconstruit à partir du fichier de scène. Chaque objet retrouve la position que lui a donnée la scène, y compris une caisse renversée par le joueur ; chaque champ retrouve sa valeur dans l’Inspector, et Awake et Start s’exécutent à nouveau. Aucun code n’a besoin de remettre les objets en place un par un. Comme le bouton demande la scène active au lieu d’un nom tel que "Level3", le même script redémarre n’importe quel niveau dans lequel il est placé.

Un champ static ne fait pas partie de la scène : il appartient à la classe, donc un rechargement le laisse tel quel. Un private static float bestTime; conserve le meilleur temps après les redémarrages, tandis qu’un private float time; normal repart de 0 avec la nouvelle scène. GameManager.Instance est également statique : après un rechargement, il pointe vers le GameManager détruit jusqu’à ce que le Awake du nouveau définisse sa valeur.

challenge icon

Défi

Facile

Une chute doit relancer le niveau dans lequel se trouve le joueur et être comptabilisée.

  1. Ajoute using UnityEngine.SceneManagement; et modifie le compteur en private static int falls;, afin qu’il soit conservé lors du rechargement.
  2. Dans Update(), lorsque player.position.y < fallY, exécute falls++; et charge SceneManager.GetActiveScene().name.

Appuie sur « Jouer » et tombe d’un bord dans les deux niveaux : Falls: 1, puis Falls: 2. Ensuite, appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using TMPro;

public class LevelRestart : MonoBehaviour
{
    public Transform player;
    public TMP_Text fallsText;
    public float fallY = -3f;
    private int falls;

    void Start()
    {
        fallsText.text = "Falls: " + falls;
    }

    void Update()
    {
        // Si le joueur passe sous fallY : compter la chute et redémarrer le niveau dans lequel il se trouve
    }
}

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

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