Un seul script gère le jeu
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 12 sur 60.
Place le score dans le script du joueur, les vies dans un script de santé et la vérification de fin de partie dans un troisième script : chaque script a donc besoin des nombres des autres, et chaque nouvelle règle touche plusieurs fichiers. Les jeux Unity confient généralement la gestion de ces nombres à un seul script, le GameManager, attaché à un GameObject vide qui lui est propre. Il gère le score, les vies et la règle qui met fin à la partie. Les autres scripts se contentent de signaler ce qui s’est passé en appelant ses méthodes publiques. Dans cette séance de tirs au but, le filet signale chaque but :
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs, sur le déclencheur du but
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}Le filet ne sait pas combien de tirs il reste ni quand la partie se termine. Il signale un but, et le gestionnaire décide ce que cela signifie ; le script du gardien signale un arrêt avec game.ShotTaken(false). Pour une séance de tirs au but de 3 tirs, tu changes un seul nombre dans un seul script. La vérification en haut de ShotTaken empêche qu’un ballon qui entre dans le but après la fin du temps réglementaire soit comptabilisé.
Tu renseignes le champ game dans l’Inspector en faisant glisser l’objet GameManager dessus, et Unity trouve le script GameManager sur cet objet. Le gestionnaire est aussi l’endroit où gérer l’interface de jeu : lorsqu’il contient le texte du score et le panneau de fin de partie, l’écran change dans la même méthode que celle qui modifie les nombres, et aucun autre script ne touche à l’interface.
Défi
FacileLaisse le GameManager gérer le score et les vies.
AddScore(int points): sauf sigameOverest vrai, ajoute la valeur àscoreet afficheScore: 6dansscoreText.LoseLife(): retire 1 àliveset afficheLives: 2; à 0, définisgameOver, affichegameOverPanelet définisplayer.enabled = false.- Dans
GemetBomb, lorsqueother.CompareTag("Player")est vrai, appellegame.AddScore(points)ougame.LoseLife(), puisDestroy(gameObject).
Appuie sur « Jouer » et touche trois bombes. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// ajoute les points et affiche le nouveau score, sauf si la partie est terminée
}
public void LoseLife()
{
// retire une vie et affiche le nombre de vies restantes ; à 0 vie, la partie est terminée
}
}
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