Charger avec une valeur par défaut
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 23 sur 56.
Une clé qui n’a jamais été enregistrée renvoie 0, et 0 est une mauvaise valeur de départ pour certaines valeurs. Dans un jeu de course, le joueur choisit le nombre de concurrents contrôlés par l’ordinateur qui participent à une course, et un nouveau joueur devrait courir contre 3 concurrents. Chaque Get prend un deuxième argument, la valeur par défaut, qu’il renvoie lorsque la clé est absente :
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");Une fois que le joueur enregistre 0 concurrent pour s’entraîner seul, GetInt("Rivals", 3) renvoie 0 : la valeur par défaut ne remplace qu’une clé absente. C’est pourquoi if (rivals == 0) rivals = 3; est une mauvaise façon de définir une valeur par défaut. Cette méthode ne permet pas de distinguer un 0 enregistré de l’absence de valeur enregistrée, et rétablit 3 concurrents dans chaque course d’entraînement.
PlayerPrefs.HasKey(key) indique si une clé a déjà été enregistrée, quelle que soit sa valeur ; il permet donc de distinguer une première partie d’une partie ultérieure. Ce jeu souhaite la bienvenue à un nouveau pilote :
void Start()
{
if (!PlayerPrefs.HasKey("Driver"))
{
Debug.Log("First race! Pick a name in the garage.");
}
string driver = PlayerPrefs.GetString("Driver", "Rookie");
Debug.Log("Driver: " + driver);
}Utilise HasKey avant tout code qui enregistre la clé : dès le premier enregistrement, il renvoie true jusqu’à ce que la clé soit supprimée avec PlayerPrefs.DeleteKey.
Défi
MoyenLa borne d’arcade conserve les crédits d’un joueur sous la clé Credits : la barre d’espace permet de jouer une partie pour un crédit, et les crédits restants sont enregistrés après chaque partie. Les nouveaux joueurs ne sont pas encore pris en charge :
- Un joueur sans données enregistrées commence avec 5 crédits gratuits. Un joueur qui a utilisé tous ses crédits a 0 crédit enregistré et commence avec 0, et non 5.
- L’objet
welcomeText(Welcome! Here are 5 free credits) s’affiche uniquement pour un joueur qui n’a aucunCreditsenregistré. Les autres joueurs ne le voient pas.
Appuie sur Play et joue une partie, puis appuie sur Stop et de nouveau sur Play : le message de bienvenue a disparu. Puis appuie sur Check.
Essayez vous-même
using UnityEngine;
using TMPro;
public class ArcadeCredits : MonoBehaviour
{
public TMP_Text creditsText;
public GameObject welcomeText;
private int credits;
void Start()
{
credits = PlayerPrefs.GetInt("Credits");
welcomeText.SetActive(false);
ShowCredits();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
{
credits--;
PlayerPrefs.SetInt("Credits", credits);
PlayerPrefs.Save();
ShowCredits();
}
}
void ShowCredits()
{
creditsText.text = "Credits: " + credits;
}
}
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
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 niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons 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 banque