PlayerPrefs : initialisation lors du build
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
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
-
- Messages : 351
- Inscription : 21 Mars 2011 18:58
- Localisation : Toulouse
PlayerPrefs : initialisation lors du build
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
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
- boubouk50
- ModoGenereux
- Messages : 6245
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: PlayerPrefs : initialisation lors du build
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
-
- Messages : 351
- Inscription : 21 Mars 2011 18:58
- Localisation : Toulouse
Re: PlayerPrefs : initialisation lors du build
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.
- Silverglade
- Messages : 264
- Inscription : 04 Août 2012 17:52
Re: PlayerPrefs : initialisation lors du build
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.
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.
Re: PlayerPrefs : initialisation lors du build
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
Hop Boy
-
- Messages : 351
- Inscription : 21 Mars 2011 18:58
- Localisation : Toulouse
Re: PlayerPrefs : initialisation lors du build
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
Re: PlayerPrefs : initialisation lors du build
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 :
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.
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
-
- Messages : 351
- Inscription : 21 Mars 2011 18:58
- Localisation : Toulouse
Re: PlayerPrefs : initialisation lors du build
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..
Re: PlayerPrefs : initialisation lors du build
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.
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
Hop Boy