PlayerPrefs : initialisation lors du build

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
cariXmatic31
Messages : 351
Inscription : 21 Mars 2011 18:58
Localisation : Toulouse

PlayerPrefs : initialisation lors du build

Message par cariXmatic31 » 09 Fév 2016 17:18

Bonjour à tous :)

J'ai un ptit jeu avec plusieurs niveaux. Dans le menu, j'ai une liste des niveaux qui s'affiche.
Pour la créer, je fais ça dynamiquement :
- si c'est la première fois qu'on joue (j'utilise PlayerPrefs.HasKey), j'initialise tous les PlayerPrefs et je construis avec du prédéfini (dans l'inspector)
- si c'est pas la première fois, j'utilise les PlayerPrefs.

Le problème c'est que lors du build, mes PlayerPrefs sont déjà sauvegardées et donc tous mes niveaux ne sont pas initialisés... Du coup quand je joue pour la première fois sur la version exécutable,et bien j'ai tous les niveaux débloqués.
J'espère que vous voyez de quoi je veux parler ! Si vous avez une idée de comment réinitialiser les PlayerPrefs lors de premier launch, ou une autre méthode, je suis tout ouï :)

Merci à vous et bonne soirée :merci:

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6245
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: PlayerPrefs : initialisation lors du build

Message par boubouk50 » 09 Fév 2016 17:35

Pour toi (et peut-être pour les utilisateurs qui voudraient faire un RàZ des données), tu peux facilement supprimer les clés des playerPrefs:
http://docs.unity3d.com/ScriptReference ... teKey.html (Comme d'hab, la doc!)

Pour les supprimer à la main:http://docs.unity3d.com/ScriptReference ... Prefs.html (Comme d'hab, la doc!), la doc te dit où sont les clés.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

cariXmatic31
Messages : 351
Inscription : 21 Mars 2011 18:58
Localisation : Toulouse

Re: PlayerPrefs : initialisation lors du build

Message par cariXmatic31 » 09 Fév 2016 17:49

J'ai vu ça, mais le problème c'est que pour les supprimer, il faut bien que je sache que c'est la première fois que l'utilisateur lance le jeu, donc une clé qui enregistre ça.. Hors toutes mes clés ont une valeur qui aura été prise dans l'Editor, donc je ne pourrai jamais savoir.

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: PlayerPrefs : initialisation lors du build

Message par Silverglade » 09 Fév 2016 18:11

Non, toi tu dois manuellement les supprimer avant compilation.
Il n'y a je pense pas d'autre moyen puisque si tu te base sur une clé PlayerPref pour savoir si tu as déjà joué, ton initialisation va tourner en rond.

Rapide et efficace, pression sur une touche = PlayerPrefs.DeleteAll();
Puis tu compiles, le dossier du registre seras remis à 0.

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: PlayerPrefs : initialisation lors du build

Message par Titan » 09 Fév 2016 18:56

Je me suis fait un mini script editor pour ça, d'ailleurs c'est agaçant que ce ne soit pas présent de base:

Code : Tout sélectionner

using UnityEngine;
using UnityEditor;
using System.Collections;

public class CleanPlayerPrefs : MonoBehaviour 
{
	[MenuItem ("Edit/Clean save")]
	static void CleanSave() 
	{
		PlayerPrefs.DeleteAll();
		Debug.Log("Saved data deleted.");
	}
}
____________________________________________
Hop Boy

cariXmatic31
Messages : 351
Inscription : 21 Mars 2011 18:58
Localisation : Toulouse

Re: PlayerPrefs : initialisation lors du build

Message par cariXmatic31 » 09 Fév 2016 19:56

Merci Titan, ça a l'air de marcher ! En fait ça me renvoie une erreur (type or namespace UnityEditor could not be found..).. et du coup ça interrompt la compilation. Tu ferais comment pour éviter ça ? Merci encore

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: PlayerPrefs : initialisation lors du build

Message par simonj » 09 Fév 2016 21:29

J'ai pas tout suivis, mais si tu compiles tu ne peux pas avoir de fonction UnityEditor (Je ne sais plus si tu peux avoir du UnityEditor quand tu build sur PC. Sur mobile je sais que c'est impossible). Faut juste faire un #if pour exclure cette partie de code dans le build final en fonction de la plateforme.

En gros ça donne ça :

Code : Tout sélectionner

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections;

public class CleanPlayerPrefs : MonoBehaviour 
{
   [MenuItem ("Edit/Clean save")]
   static void CleanSave() 
   {
      PlayerPrefs.DeleteAll();
      Debug.Log("Saved data deleted.");
   }
}
#endif
J'y suis allé un peu comme un bourrin parce que normalement tu entoures de #if UNITY_EDITOR que ce dont tu ne veux pas au build final (C'est à dire la ligne "using UnityEditor;" et la ligne "[MenuItem ("Edit/Clean save")]"). Mais ça marche aussi parce que tu ne te serviras pas de cette fonction dans ton build.

cariXmatic31
Messages : 351
Inscription : 21 Mars 2011 18:58
Localisation : Toulouse

Re: PlayerPrefs : initialisation lors du build

Message par cariXmatic31 » 10 Fév 2016 10:19

Okay merci, ça marche. C'est quand même dommage que les PlayerPrefs soient liées entre celles de la version compilée et de l'editor..

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: PlayerPrefs : initialisation lors du build

Message par Titan » 10 Fév 2016 10:54

Comme tout les script qui ne font pas partie de ton jeu mais qui servent à modder l'interface d'unity, il faut le mettre dans un dossier que tu va appeler "Editor" pour que ça marche (sans changement).
http://docs.unity3d.com/Manual/SpecialFolders.html

Ensuite tu a un bouton en bas de la fenétre edition "clean save" qui apparaît et qui vide les playerpref. Sinon tu peut aussi ajouter l'atribut PostProcessBuildAttribute au dessus de la fonction pour que ce soit executé automatiquement quand tu build.

Code : Tout sélectionner

[PostProcessBuildAttribute(1)]
____________________________________________
Hop Boy

Répondre

Revenir vers « (C#) CSharp »