Menu
CoddyTech

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.

challenge icon

Défi

Facile

Une 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 au score et l’affiche dans scoreText, sous la forme Score: 6.
  • LoseLife() retire 1 à lives (3 au départ) et l’affiche dans livesText, sous la forme Lives: 2.
  • Lorsque lives atteint 0, la partie est terminée : affiche gameOverPanel et désactive le script du joueur pour que les flèches ne fonctionnent plus. Ensuite, AddScore ne 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
    }
}
quiz iconTestez-vous

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