Fiche mémo sur les PlayerPrefs avec Unity

La classe PlayerPrefs de Unity permet de sauvegarder sur le disque de l’utilisateur des données. Ces données sont enregistrées et conservées même après la fermeture du jeu ou l’extinction de l’ordinateur de l’utilisateur.

Il est possible de sauvegarder (Set) des données et de charger (Get) des données de type int, float ou string. Cela peut permettre d’enregistrer l’état d’une partie ou de garder en mémoire des événements qui se sont produit dans le jeu (mission terminée, boss battu, objet ramassé, expérience du personnage, barre de vie…).

Les PlayerPrefs sont donc essentiels mais assez mal maîtrisés. Voici donc un tableau récapitulatif de l’utilisation de la classe PlayerPrefs de Unity avec des exemples d’appels, de valeurs et des explications.

Tableau récapitulatif

Appel de la fonctionExemple de retourCommentaire / explication
PlayerPrefs.GetInt(‘’vie’’) ;3Charge la donnée stockée sur la clé ‘vie’. 3 est un exemple fictif de valeur enregistrée
PlayerPrefs.GetInt(‘’vie’’, 3) ;2Il s’agit de la même fonction. La valeur retournée ici est 2 (fictif). Le ‘3’ spécifié permet d’indiquer une valeur par défaut si aucune valeur n’est trouvée sur le disque.
PlayerPrefs.SetInt(‘’vie’’, 2) ; Permet de sauvegarder la valeur 2 sur la clé ‘vie’. Si une autre valeur existe déjà sur cette clé, elle est écrasée.
PlayerPrefs.GetFloat(‘’vitesse’’) ;42,79Permet de charger un float (valeur à virgule).
PlayerPrefs.GetFloat(‘’vitesse’’, 100.0f) ;100,0Permet de charger un float et de donner une valeur par défaut si rien n’est trouvé. Ici, la valeur par défaut est utilisée car rien n’a été trouvé sur le disque.
PlayerPrefs.SetFloat(‘‘vitesse’’, 2.2f) ; On stocke la valeur 2,2 dans la clé vitesse.
PlayerPrefs.GetString(‘’test’’) ;‘’exemple’’On charge ce qui est stocké dans la clé ‘test’. Il s’agit de la valeur ‘exemple’ qui a été chargée.
PlayerPrefs.GetString(‘’test’’, ‘’toto’’) ;‘’exemple’’On charge la valeur comme dans l’exemple précédent. Si jamais aucune valeur n’est trouvée alors c’est la valeur par défaut ‘’toto’’ qui serait retourné.
PlayerPrefs.SetString(‘’test’’, ‘’titi’’) ; Ici, on stocke la valeur ‘titi’ dans la clé ‘test’.
Un tableau récapitulatif des fonctions de la classe PlayerPrefs de Unity

Exemples avancés

Aller plus loin : Il est possible de sauvegarder beaucoup de choses avec les PlayerPrefs. Vous n’avez accès qu’à 3 types primitifs (int, float et string) mais vous pouvez stocker ce que vous voulez ! Par exemple pour stocker / charger un Vector2 (Idem pour Vector3) vous pourriez créer les fonctions suivantes :

    public void SavePlayerPosition()
    {
        // Sauvegarde de la position du joueur (axes X et Y)
        PlayerPrefs.SetFloat("posX", this.gameObject.transform.position.x);
        PlayerPrefs.SetFloat("posY", this.gameObject.transform.position.y);
    }

    public void LoadPlayerPosition()
    {
        // Chargement de la position X,Y sauvegardée
        float savedXpos = PlayerPrefs.GetFloat("posX", 0);
        float savedYpos = PlayerPrefs.GetFloat("posY", 0);
        // On positionne le joueur avec un Vector2
        this.gameObject.transform.position = new Vector2(savedXpos, savedYpos);
    }


Vous pouvez également sauvegarder des chaînes complexes (JSON, CSV, …) avec SetString puis les charger et enfin des découper (parser) pour récupérer un ensemble de données (vie, mana, xp, or, force, niveau…).

Pour sauvegarder une chaîne contenant plusieurs données, vous pourriez par exemple faire :

PlayerPrefs.SetString("exempleComplexe", "vie=2,mana=5,xp=500,or=1250,niveau=16");

Ensuite, pour récupérer cette chaîne et la découper par exemple au niveau des virgules, vous pourriez utiliser la fonction Split de C# :

string exempleData = PlayerPrefs.GetString("exempleComplexe");
string[] valeurs = exempleData.Split(',');

Chaque paramètre serait alors à un index précis dans le tableau valeurs[].

Voilà pour ce petit récapitulatif sur l’utilisation des PlayerPrefs. Vous pouvez télécharger la fiche mémo au format PDF sur cette page : https://formation-facile.fr/telechargements/ (Section Unity).

A bientôt pour d’autres astuces Unity.

Un nouveau design et de nouvelles fonctionnalités

Nouveau design u3d-dev

Après 6 années dans sa première version, http://unity3d-dev.com fait peau neuve et apporte son lot de nouvelles fonctionnalités !

Le design a été entièrement repensé et est un peu plus au goût du jour. Le contenu du site a été conservé et des nouveautés ont été et vont être ajoutées. Au programme de nouveaux tutos et des articles dans lesquels je partagerai avec vous des astuces pour améliorer vos jeux.

Les nouveautés

Au niveau des nouvelles fonctionnalités, je vous propose un système de suivi des cours. Ce système permet de suivre votre progression (votre apprentissage) et vous incite à suivre les formations pour ne pas perdre vos connaissances. Ce système vous permet également de valider vos acquis en vous donnant un score afin de déterminer si vous avez réussi le cours. Enfin, je vous propose un nouveau système de visionnage plus complet, plus intuitif et plus moderne :

Le lecteur vidéo de unity3d-dev
Le nouveau système de suivi des cours en ligne

Un contenu toujours gratuit avec 1 cours premium

Le contenu du site est gratuit, les tutoriels sont visibles en ligne gratuitement et sans inscription. Pour nous pouvoir faire fonctionner ce site nous avons ajouté, en plus des cours gratuits, une formation premium payante. Cette formation complète vous permettra d’aller plus loin avec Unity 3D grâce à ~20 heures de cours vidéo. Vous apprendrez les bonnes pratiques et développerez deux jeux vidéo.

Jeu de plateforme 3D créé avec Unity
Un jeu que vous développerez dans la formation premium

Vous avez la parole

Mon souhait pour cette nouvelle version du site est également de vous donner la parole. J’aimerais avoir vos idées, vos demandes et souhaits afin que je puisse réaliser des tutoriels vidéo selon vos besoins. Contactez moi via YouTube, ce site ou Udemy et faites moi vos suggestions. Je pourrai ainsi ajouter des vidéos gratuites dans la section cours du site.