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 56.
Mets 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 ; chaque script a donc besoin des nombres des autres, et chaque nouvelle règle touche plusieurs fichiers. Les jeux Unity confient généralement ces nombres à un seul script, le GameManager, placé sur son propre GameObject vide. 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 modifies un seul nombre dans un seul script. La vérification en haut de ShotTaken empêche qu’un ballon qui entre en roulant 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 également l’endroit où placer le HUD : lorsqu’il contient le texte du score et le panneau de fin de partie, l’écran est mis à jour dans la même méthode que celle qui modifie les nombres, et aucun autre script ne touche à l’interface utilisateur.
Défi
FacileUne chasse aux gemmes. Les flèches déplacent le joueur (son script est prêt). Les gemmes rapportent leurs points, les bombes coûtent une vie, et un GameManager gère tout. Dans l’Inspector, le champ game de chaque gemme et de chaque bombe est déjà lié à l’objet GameManager, et les champs du GameManager sont déjà liés au HUD et au joueur.
Dans GameManager.cs :
AddScore(int points)ajoute les points auscoreet l’affiche dansscoreText, sous la formeScore: 6.LoseLife()retire 1 àlives(3 au départ) et l’affiche danslivesText, sous la formeLives: 2.- Lorsque
livesatteint 0, la partie est terminée : affichegameOverPanelet désactive le script du joueur pour que les flèches ne fonctionnent plus. Ensuite,AddScorene change rien.
Dans Gem.cs et Bomb.cs : lorsque le joueur (marqué avec le tag Player) en touche un, il en informe le jeu (une gemme lui transmet ses points, une bombe lui fait perdre une vie) et se supprime.
Appuie sur Play, ramasse les gemmes et touche les bombes, puis clique sur Check.
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)
{
// ajouter les points et afficher le nouveau score, sauf si la partie est terminée
}
public void LoseLife()
{
// retirer une vie et afficher le nombre de vies restant ; à 0 vie, la partie est terminée
}
}
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