Menu
CoddyTech

Les états du jeu

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

Un jeu se trouve dans un seul état à la fois : en attente du joueur, en cours ou terminé. Deux booléens comme isPlaying et isOver peuvent par erreur être tous deux vrais, et une chaîne comme "Playng" compile sans jamais correspondre. C# possède un type pour une liste fixe de choix : l’énumération. Ce feu de circulation en utilise une :

public enum Signal { Red, Yellow, Green }

public class Crossing : MonoBehaviour
{
    public Signal signal;

    void Update()
    {
        if (signal == Signal.Red && Input.GetMouseButtonDown(0))
        {
            signal = Signal.Green;
            Debug.Log("Walk!");
        }
    }

    public bool CanWalk()
    {
        return signal == Signal.Green;
    }
}

enum Signal { Red, Yellow, Green } crée un nouveau type comportant exactement trois valeurs, écrites Signal.Red, Signal.Yellow et Signal.Green. Un champ Signal contient l’une d’elles à la fois ; tu la compares avec == et tu la modifies avec =. Une faute de frappe comme Signal.Gren provoque une erreur de compilation, donc l’erreur apparaît avant que tu appuies sur « Jouer ».

L’énumération est déclarée en dehors de la classe, donc chaque script peut utiliser Signal, et le script d’un piéton peut demander crossing.CanWalk(). Un nouveau champ d’énumération commence par la première valeur, ici Red. Dans l’Inspecteur, un champ public d’énumération s’affiche sous forme de liste déroulante de ses valeurs. En dessous, chaque valeur est un nombre compté à partir de 0 : (int)Signal.Green vaut 2.

challenge icon

Défi

Facile

Donne trois états à la traversée de lave.

  1. Déclare public enum GameState { Ready, Playing, GameOver } au-dessus de la classe GameManager, et public GameState state; dans celle-ci.
  2. Dans Update(), tant que l’état est Ready, Space définit l’état sur Playing et consigne Go!. Dans HitLava(), tant que l’état est Playing, définis l’état sur GameOver et consigne Game over.
  3. Dans Player.cs, lis les touches fléchées uniquement lorsque GameManager.Instance.state == GameState.Playing.

Appuie sur « Jouer » : les touches fléchées attendent que tu appuies sur Space. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

// Déclare l’enum GameState ici : Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // un champ public de type GameState nommé state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // Lorsque l’état est Ready, Space démarre la partie et affiche Go! dans le journal
    }

    public void HitLava()
    {
        // Lorsque l’état est Playing, la partie se termine : affiche Game over dans le journal
    }
}

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

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