Menu
CoddyTech

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.

challenge icon

Défi

Moyen

La 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 aucun Credits enregistré. 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;
    }
}
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 Créer de vrais jeux