Meilleur score
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 24 sur 60.
Un meilleur score est le meilleur résultat obtenu au cours de toutes les parties jouées. Il est donc stocké dans PlayerPrefs et ne change que lorsqu’une partie le dépasse. Cette table de flipper vérifie le score lorsque la dernière bille tombe :
void GameOver()
{
int best = PlayerPrefs.GetInt("PinballBest", 0);
if (score > best)
{
PlayerPrefs.SetInt("PinballBest", score);
PlayerPrefs.Save();
Debug.Log("New high score: " + score);
}
}C’est la comparaison qui permet de déterminer s’il s’agit d’un meilleur score. Sans elle, une partie avec un score de 300 après un meilleur score de 5000 enregistrerait 300, et le record serait perdu. Compare le score au meilleur score enregistré, et non à une valeur qui repart de 0 à chaque partie : un champ dont aucune valeur n’a été chargée vaut 0 après chaque redémarrage, donc n’importe quel score le dépasse. score > best conserve l’ancien record en cas d’égalité, tandis que score >= best considérerait une égalité comme un nouveau meilleur score.
Pour afficher le meilleur score pendant la partie, charge-le dans un champ dans Start() et affiche ce champ. Lorsqu’une partie le dépasse, mets à jour le champ, PlayerPrefs et le texte en même temps, afin que l’écran et la valeur enregistrée ne soient jamais en désaccord.
Défi
MoyenConserve un meilleur score sous la clé BestPoints.
- Dans
Start(), au-dessus deShowBest();, écrisbest = PlayerPrefs.GetInt("BestPoints", 0);. - Dans
EndRound(), à l’intérieur deif (points > best): définisbest = points;, enregistre-le avecPlayerPrefs.SetIntetPlayerPrefs.Save(), puis appelleShowBest();etnewBestText.SetActive(true);.
Appuie sur « Jouer » et gonfle un ballon (maintiens la barre d’espace, puis relâche-la), puis sur Arrêter et « Jouer » : le meilleur score est conservé. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
using TMPro;
public class BalloonPump : MonoBehaviour
{
public TMP_Text pointsText;
public TMP_Text bestText;
public GameObject newBestText;
public float pumpRate = 20f;
private float air;
private int points;
private int best;
private bool roundOver;
void Start()
{
ShowBest();
}
void Update()
{
if (roundOver) return;
if (Input.GetKey(KeyCode.Space))
{
air += pumpRate * Time.deltaTime;
transform.localScale = Vector3.one * (1f + air / 50f);
pointsText.text = "Points: " + Mathf.FloorToInt(air);
if (air > 100f)
{
points = 0;
pointsText.text = "Pop! Points: 0";
GetComponent<Renderer>().enabled = false;
roundOver = true;
EndRound();
}
}
else if (Input.GetKeyUp(KeyCode.Space))
{
points = Mathf.FloorToInt(air);
pointsText.text = "Points: " + points;
roundOver = true;
EndRound();
}
}
void EndRound()
{
// Enregistrez un nouveau record ici
}
void ShowBest()
{
bestText.text = "Best: " + best;
}
}
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 niveau2Boutons 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 banqueEntraînez-vous par vous-même : Playground Unity