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 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.

challenge icon

Défi

Facile

Laisse le GameManager gérer le score et les vies.

  1. AddScore(int points) : sauf si gameOver est vrai, ajoute la valeur à score et affiche Score: 6 dans scoreText.
  2. LoseLife() : retire 1 à lives et affiche Lives: 2 ; à 0, définis gameOver, affiche gameOverPanel et définis player.enabled = false.
  3. Dans Gem et Bomb, lorsque other.CompareTag("Player") est vrai, appelle game.AddScore(points) ou game.LoseLife(), puis Destroy(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

Entraînez-vous par vous-même : Playground Unity