Menu
CoddyTech

Faites-en le vôtre

Leçon 14 sur 14 du cours Jeu Unity : Snake 3D de Coddy.

Il reste une fonctionnalité : conserver le meilleur score après la fermeture du jeu. PlayerPrefs le stocke : lis-le avec une valeur par défaut dans Start(), puis enregistre-le à la fin de la partie si le score le dépasse. Dans un jeu de course, le meilleur tour se conserve dans l’autre sens, puisqu’un temps plus court est préférable :

if (lapTime < bestLap)
{
    bestLap = lapTime;
    PlayerPrefs.SetFloat("BestLap", bestLap);
}

Tu peux ensuite régler le jeu à ta guise. Les valeurs de Snake déterminent ses sensations : tick à 0.25 offre un départ tranquille, tandis que 0.1 donne un départ rapide ; speedUp à 0.01 accélère le serpent plus tôt, et minTick à 0.05 rend la fin de partie frénétique. L’Inspector de ce joueur est en lecture seule, et la scène du parcours laisse ces trois champs aux valeurs de ton code : modifie-les là où ils sont déclarés, puis appuie sur Play. Dans ton propre projet Unity, modifie-les sur le composant Snake dans l’Inspector : une nouvelle valeur par défaut dans le code ne s’applique pas à un composant déjà présent dans une scène.

challenge icon

Défi

Difficile

Conservez un meilleur score entre les parties, puis ajustez le jeu.

  1. Dans GameManager, ajoutez public TMP_Text bestText; et private int best;
  2. Dans Start(), utilisez best = PlayerPrefs.GetInt("BestScore", 0); et affichez "Best: " + best.
  3. Dans GameOver(), lorsque le score dépasse le meilleur score, définissez best, enregistrez-le sous BestScore et affichez-le.
  4. Ajustez tick, speedUp et minTick là où ils sont déclarés dans Snake.

Appuyez sur « Jouer », établissez un meilleur score et rejouez : le meilleur score reste en haut à droite. Puis cliquez sur « Vérifier ».

Essayez vous-même

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    public TMP_Text scoreText;
    public GameObject gameOverPanel;
    public Button playAgainButton;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        scoreText.text = "Score: 0";
        playAgainButton.onClick.AddListener(PlayAgain);
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        scoreText.text = "Score: " + score;
        MoveFood();
    }

    public void GameOver()
    {
        gameOverPanel.SetActive(true);
    }

    void PlayAgain()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
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 Jeu Unity : Snake 3D

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