[Résolu] Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Toutes les questions sur le développement Mobile, y compris la partie script.
Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 21 Juin 2017 17:02

Non je récupère les données, et tout marche correctement sur l'éditeur Unity. Mais j'ai transféré mon jeu sur mon iPod, et quand je quitte l'application et que je reviens toutes les données sont à 0
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

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

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par boubouk50 » 21 Juin 2017 17:37

boubouk50 a écrit :Effectues-tu un PlayerPrefs.Save () pour enregistrer les modifications?
Je pensais que c'était pourtant clair autant l'utilité que l'utilisation... Je te dis à quoi ça sert et te donne la ligne de code à ajouter...

Si cela fonctionne sur PC mais pas sur mobile, alors c'est que le fonctionnement même du PlayerPrefs est en cause car différent entre 2 plateformes. Ajoute PlayerPrefs.Save () après avoir sauvegarder tes données (quand tu fais des Set)
Si rien ne change, cela peut être dû aux permissions... ou encore d'autres choses. Comme je te l'ai dit, le problème est récurrent pour certains mobiles et il faudra surement passer par une autre solution de sauvegarde.
"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

Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 21 Juin 2017 18:47

Code : Tout sélectionner

var ScriptRessources: Ressources;
var ScriptMenuAccount: MenuAccount;

function Start () {
	ScriptRessources = GameObject.Find("ScriptRessources").GetComponent(Ressources);
	ScriptMenuAccount = GameObject.Find("ScriptMenuAccount").GetComponent(MenuAccount);
}

function SAVE_DATA () {
	PlayerPrefs.SetInt("EAU", ScriptRessources.Eau);
	PlayerPrefs.SetString("PSEUDO_1", ScriptMenuAccount.Pseudo1);
	PlayerPrefs.SetString("PSEUDO_2", ScriptMenuAccount.Pseudo2);
	PlayerPrefs.SetString("PSEUDO_3", ScriptMenuAccount.Pseudo3);
	PlayerPrefs.SetString("PSEUDO_4", ScriptMenuAccount.Pseudo4);
	PlayerPrefs.Save();
	Debug.Log("DATA SAVED");
}

function DELETE_DATA () {
	PlayerPrefs.DeleteAll();
}
Voilà ce que j'ai fait, mais ça ne fonctionne point... désolé d'être aussi relou...

Ah et oui j'ai un DeleteAll !
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

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

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par boubouk50 » 22 Juin 2017 09:19

Concernant le DeleteAll (), quand ou comment est-il appelé? A savoir si ce n'est pas lui qui serait en défaut. Mais vu que tu me dis que ça marche dans l'éditeur, je ne pense pas... Je pense que ton iPod fait partie des mobiles qui empêchent la sauvegarde...

Je crois qu'on est parti pour trouver une autre solution de sauvegarde...
Il y a le Learn officiel pour débutants sur la sauvegarde de données.
Et d'autres sur le net: Celui là à l'air bien, il y a aussi tout le code pour le PlayerPrefs.
Ils sont en anglais, mais avec un peu de recherche sur Gogole, peut-être trouveras tu ton bonheur en français.
"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

Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 22 Juin 2017 13:12

Non j'ai supprimé la fonction DeleteAll () et ça ne marche toujours pas, je regarde tes propositions et je te donne des nouvelles ^^
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 22 Juin 2017 13:18

:pleur4: Je vois que c'est du Cs, et moi je cherche du Js... Ça va être plus compliqué mais bon...
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

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

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par boubouk50 » 22 Juin 2017 13:46

Ça va Ouin-ouin... c'est presque pareil, seule la syntaxe change. :lol:
"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

Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 22 Juin 2017 18:54

J'ai trouvé la solution ! Et ce n'est pas du tout ce qu'on croyait ! Mais je pense que vous auriez eu du mal à m'aider, car je n'ai pas jugé nécessaire de vous envoyer le script qui récupérait le PlayerPrefs.

Mon script avant:

Code : Tout sélectionner

static var Eau : int = 0;

function Start () {
Eau = PlayerPrefs.GetInt("EAU");
}

function Update () {
	
}
function OnGUI () {
	GUI.skin= LabelEau;
	GUI.color=Color.white;
	GUI.Label(new Rect(60,15,300,50), "" +Eau);
}

function AJOUTER_EAU () {
Eau += 1;
}
La partie qui bloque est en haut. En fait (et ça m'étonnait aussi), le problème n'est pas de mon appareil. Je pense (dites moi si je me trompe) avoir compris le principe du Main(), Start() et Awake() (Même si en l'occurence il n'y a pas d'Awake()). En fait si j'en ai bien déduit de tous mes essais, la fonction Main() ne se définit pas, et se joue lors du lancement du script (donc de l'application), la fonction Start() se joue lors du lancement de la scène, et Awake() se joue avant Main (Enfin je crois, ou alors c'est juste avant Start() ?). En tous cas, le problème était que j'avais un Menu qui se lançait au début du jeu (J'ai mis une image du Menu. Dans ce menu on définissait un pseudo pour le joueur, et j'avais donc mis un bouton pour sauvegarder ce pseudo. Sauf que j'utilisais le même script et la même fonction pour sauvegarder toutes les données (ainsi que ma variable "Eau").

Donc pour résumer, au lancement de l'application:

1. La fonction Main s'effectue, et définit la variable Eau à 0
2. Je sauvegarde cette variable dans les PlayerPrefs dans le menu, avant de récupérer cette variable dans les PlayerPrefs, justement
3. J'ouvre ma scène de jeu, la fonction Start() s'exécute et récupère les PlayerPrefs, mais celles-ci ont été mises à 0 par la fonction Main() lors du lancement du jeu
4. Résultat, mon Eau est revenue à 0. Mais lorsque je change de scène la fonction Main() ne se ré-exécute pas, donc si j'ai augmenté la variable, c'est la bonne valeur qui est enregistrée dans les PlayerPrefs.

Conclusion:

On a cherché trop loin, voilà le bon script:

Code : Tout sélectionner

#pragma strict

var LabelEau: GUISkin;

static var Eau : int;

function Start () {
if(PlayerPrefs.HasKey("EAU")==false){
Eau = 0;
}else{
Eau = PlayerPrefs.GetInt("EAU");
}
}

function Update () {
	
}
function OnGUI () {
	GUI.skin= LabelEau;
	GUI.color=Color.white;
	GUI.Label(new Rect(60,15,300,50), "" +Eau);
}

function AJOUTER_EAU () {
Eau += 1;
}
Je pense que j'ai compris mon erreur, car sinon je ne vois pas pourquoi la variable du pseudo aurait été sauvegardée, elle...
Merci à tous ceux qui m'ont aidé en tous cas !

P.S: si j'ai fait toutes ces explications, c'est que j'ai vu que ce sujet avait intéressé pas mal de monde, donc j'espère que j'en aiderai quelques uns ^^ Hésitez pas à me le faire savoir ça me fait plaisir :langue3:
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

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

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par boubouk50 » 23 Juin 2017 09:38

Litorax a écrit :J'ai trouvé la solution ! Et ce n'est pas du tout ce qu'on croyait ! Mais je pense que vous auriez eu du mal à m'aider, car je n'ai pas jugé nécessaire de vous envoyer le script qui récupérait le PlayerPrefs.
Boubouk50 a écrit :Peux-tu nous donner le code de tout ce qui utilise les PlayerPrefs stp?
Tu as un problème sur les PlayerPrefs et tu ne nous donnes pas toutes les infos. Logique. On aurait pu trouver très vite si tu nous avais donné les infos demandées dès le départ.
Litorax a écrit :Non je récupère les données, et tout marche correctement sur l'éditeur Unity. Mais j'ai transféré mon jeu sur mon iPod, et quand je quitte l'application et que je reviens toutes les données sont à 0
Je ne sais pas comment tu fais tes tests, mais cette information est fausse. Un code est toujours exécuté de la même manière. Dans l'éditeur, cela ne pouvais pas fonctionner différemment.

Dans l'ordre d'exécution des scripts:
Awake () dès que la scène commence son chargement
Start () à la fin du chargement
Update () après le Start () à chaque frame. Ce que tu appelles Main () est bien évidemment pris en compte en premier puisqu'en dehors des fonctions.

Pour répondre à ton MP, et je vois que cela a été fait, il faut ajouter [RESOLU] en début du titre du 1er message.
"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

Litorax
Messages : 67
Inscription : 07 Juin 2017 14:59

Re: Problème de sauvegarde des variables sur Mobile iOS PlayerPrefs

Message par Litorax » 23 Juin 2017 17:05

boubouk50 a écrit :Je ne sais pas comment tu fais tes tests, mais cette information est fausse. Un code est toujours exécuté de la même manière. Dans l'éditeur, cela ne pouvais pas fonctionner différemment.
En y repensant, il est possible que j'ai lancé mon jeu dans l'éditeur depuis la scène de jeu, et donc que je ne sauvegarde pas la mauvaise variable depuis le menu principal !

Merci pour tout en tous cas ! Et désolé du dérangement pour "rien"... j'espère au moins que ça en aidera quelques-uns !
Pourquoi essayer de comprendre si on ne sait pas ce que l'on cherche ?

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »