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 56.

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 recrée à partir du fichier de scène. Chaque objet revient à l’endroit où la scène l’avait placé, y compris une caisse renversée par le joueur ; chaque champ retrouve sa valeur définie dans l’Inspector, et Awake et Start s’exécutent à nouveau. Aucun code n’a besoin de remettre les éléments en place un par un. Comme le bouton demande la scène active plutôt qu’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 d’un redémarrage à l’autre, tandis qu’un private float time; ordinaire recommence à 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 Awake du nouveau GameManager lui attribue une valeur.

challenge icon

Défi

Facile

Deux niveaux, Level1 et Level2, chacun avec un objet Level contenant le script LevelRestart. Les touches fléchées déplacent le Player, et le bloc doré de Level1 charge Level2 (les deux sont prêts). Termine LevelRestart.cs :

  • Quand le joueur tombe sous fallY (-3), ajoute 1 à falls et redémarre le niveau dans lequel se trouve le joueur : une chute dans Level2 redémarre Level2.
  • falls compte toutes les chutes de la partie, il doit donc survivre au rechargement. L’affichage le montre déjà, sous la forme Falls: 1.

Appuie sur Play, marche dans le vide depuis un bord dans les deux niveaux, puis clique sur Check.

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()
    {
        // En dessous de fallY : compter la chute et redémarrer le niveau dans lequel se trouve le joueur
    }
}
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