Les états du jeu
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 14 sur 56.
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 tous deux finir par être vrais par erreur, et une chaîne comme "Playng" compile sans jamais correspondre. C# possède un type pour une liste fixe de choix, l’enum. Ce feu de circulation en utilise un :
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 avec 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 : l’erreur apparaît donc avant que tu appuies sur Play.
L’énumération est déclarée en dehors de la classe, afin que chaque script puisse utiliser Signal, et que le script d’un piéton puisse appeler crossing.CanWalk(). Un nouveau champ d’énumération prend la première valeur par défaut, ici Red. Dans l’Inspector, un champ public d’énumération apparaît 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.
Défi
FacileTraverse le sol sans toucher la lave. Le GameManager (un singleton) et le script Lava sont déjà là ; ajoute les états au jeu.
- Dans
GameManager.cs, au-dessus de la classe, déclare une énumérationGameStateavec les valeursReady,PlayingetGameOver, dans cet ordre, et ajoute à GameManager un champ public de typeGameStatenomméstate. Le jeu commence en état Ready. - Tant que le jeu est en état Ready, la barre d’espace le démarre : l’état passe à Playing et
Go!est consigné. - La lave appelle
HitLava(). Tant que le jeu est en état Playing, cela met fin à la partie : l’état passe à GameOver etGame overest consigné. La barre d’espace ne redémarre jamais une partie terminée. - Dans
Player.cs, les flèches ne déplacent le joueur que lorsque l’état est Playing.
Appuie sur Play, essaie les flèches avant d’appuyer sur la barre d’espace, puis avance dans la lave et enfin appuie sur Check.
Essayez vous-même
using UnityEngine;
// Déclare l’énumération 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, la touche Space lance le jeu et affiche Go! dans le journal
}
public void HitLava()
{
// Lorsque l’état est Playing, la partie se termine : affiche Game over dans le journal
}
}
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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque3Le gestionnaire du jeu
Un seul script gère le jeuLe SingletonLes états du jeuBasculer selon l’étatRécapitulatif : gestionnaire de manche6Projet : course sans fin
Trois voiesObstacles en vue