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.
Défi
FacileDonne trois états à la traversée de lave.
- Déclare
public enum GameState { Ready, Playing, GameOver }au-dessus de la classe GameManager, etpublic GameState state;dans celle-ci. - Dans
Update(), tant que l’état est Ready, Space définit l’état sur Playing et consigneGo!. DansHitLava(), tant que l’état est Playing, définis l’état sur GameOver et consigneGame over. - Dans
Player.cs, lis les touches fléchées uniquement lorsqueGameManager.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
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 niveau2Boutons 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 : jeu de course sans fin
Trois voiesObstacles en vueEntraînez-vous par vous-même : Playground Unity