Page 1 sur 1

[DB-AL] Input string was not in a correct format

Publié : 19 Mars 2020 18:39
par Aelhan
Bonjour,

Je me retrouve face à un problème probablement enfantin, mais malheureusement, depuis le temps qu'il traîne et que je retourne mon écran dans tous les sens, je ne vois vraiment pas le souci, et encore moins comment le corriger.
L'erreur en objet apparaît lorsque je commence une nouvelle partie, sans sauvegarde préalable (playerPrefs inexistante) :

Code : Tout sélectionner

_Input string was not in a correct format.System.Number.ParseSingle (System.String value, System.Globalization.NumberStyles options, System.Globalization.NumberFormatInfo numfmt) (at _437ba245d8404784b9fbab9b439ac908__0)
Voici la partie de mon code de "sauvegarde/chargement" incriminé :

Code : Tout sélectionner

      
      public void Sauvegarde()
      	{  
        PlayerPrefs.SetString("domeScaleY", creationDomeScript.scaleY.ToString());
        PlayerPrefs.SetString("domeScaleX", creationDomeScript.scaleX.ToString());
        }

        public void Charge()
        {
        creationDomeScript.scaleY = float.Parse(PlayerPrefs.GetString("domeScaleY","0.15f"));
        creationDomeScript.scaleX = float.Parse(PlayerPrefs.GetString("domeScaleX","0.0625f"));
        }
Dans mon script appelé, scaleX et scaleY sont bien des floats, cette erreur n'apparaît uniquement qu'au premier lancement du jeu ! Une fois les données gavées dans les playerPrefs plus de souci (d'ailleurs, l'erreur dans la console ne me provoque aucun problème visible sur l'écran de jeu, tout fonctionne normalement).
Et donc, pour moi, c'est ma valeur par défaut qui est mal écrite ?! Si quelqu'un peut me dire ce que c'est, il gagnera ma reconnaissance éternelle ;)
D'avance merci !

Re: [DB-AL] Input string was not in a correct format

Publié : 19 Mars 2020 19:04
par djulio74
Comment et dans quel ordre sont exécuté tes fonction au lancement d jeux?
Qu'elle est la fonction qui pose problème? sauvegarde ou charge?

J'aurai tendance a dire que si au lancement du jeux tu cherche a charger les données, et qu'elles n'ont pas été renseignées préalablement, ça pose forcément soucis s'il cherche à lire une donnée non initialisée.

Dans ta méthode "Charge", justement tu cherche a lire une donnée et lui donnant une valeur par défaut au cas ou, d’où le fait que ça ne pose aucun problème concret au jeux.

Re: [DB-AL] Input string was not in a correct format

Publié : 19 Mars 2020 19:26
par Aelhan
Ma fonction Charge() est appelée dans l'Awake() du GameManager (c'est bien le Charge() qui pose problème).
Et en fait, j'ai un bon paquet de données chargées ainsi, de différents types avec toutes le même système de chargement et de sauvegarde. Mais seules ces lignes là me renvoient une erreur. Pour les autres données, les valeurs par défaut sont bien chargées et ne renvoient aucune erreur (mon "domeScale" est à la fin de la fonction Charge(), donc si une autre données était erronée, il me le dirait).

Re: [DB-AL] Input string was not in a correct format

Publié : 22 Mars 2020 15:30
par Aelhan
Je me permets de relancer ceci, car en fait je me suis rendu compte qu'avec cette erreur, lors de la première exécution du jeu de nombreuses fonctionnalités ne sont pas activées.
Du coup, j'imagine que mes valeurs par défaut "0.15f" et "0.0625f" ne sont pas dans le bon format (je ne vois vraiment pas d'autre explication) et donc, comment déclarer un float par défaut si ce n'est comme ça ?!
J'ai vu que si je mettais une valeur de "1f", ça ne posait pas de souci, alors c'est vraiment un gros mystère pour moi.

Re: [DB-AL] Input string was not in a correct format

Publié : 22 Mars 2020 16:30
par EmileF
Salut,

Je ne saurais pas trop t'expliquer comment, mais je te conseille d'aller jeter un oeil ici
https://docs.microsoft.com/fr-fr/dotnet ... mework-4.8

il y a peut-être une question de point ou de virgule ("0,15f" au lieu de "0.15f")

Re: [DB-AL] Input string was not in a correct format

Publié : 22 Mars 2020 16:47
par Aelhan
Très étrange comme manière de fonctionner, en effet, le float.Parse utilise la "culture", et il faut bien mettre "0,15" (sans le f). Et maintenant, vu que je ne suis pas chauvin, je me demande si mon jeu dans un pays anglo saxon ne serait pas buggé à ce niveau là ? Je devrais pouvoir mettre CultureInfo.InvariantCulture afin d'uniformiser ça mais je ne suis pas sûr de savoir où mettre cette information.
En tout cas merci pour cette réponse pour le moins inattendue !

Si je n'ai pas de solution avec le CultureInfo, je pense que j'y mettrai du "if" et du "HasKey" (vive le bricolage !)