Personnalisez-le
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.
Défi
Difficile- Dans
GameManager, ajoutepublic TMP_Text bestText;(la scène le définit sur BestText, en haut à droite) etprivate int best;. - Dans
Start(), chargebestdepuis la cléBestScore, avec 0 si aucune valeur n’est enregistrée, et affiche-le sous la formeBest: 0. - Dans
GameOver(), lorsquescoredépassebest, définis-le comme meilleur score, enregistre-le sousBestScoreet affiche-le.
Appuie sur Play, puis sur Check. Ensuite, joue et ajuste tick, speedUp et minTick jusqu’à ce que le jeu te convienne.
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)];
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.