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

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
Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

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

Message par Aelhan » 19 Mars 2020 18:39

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 !
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

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

Message par djulio74 » 19 Mars 2020 19:04

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.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

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

Message par Aelhan » 19 Mars 2020 19:26

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).
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

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

Message par Aelhan » 22 Mars 2020 15:30

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.
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

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

Message par EmileF » 22 Mars 2020 16:30

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")
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

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

Message par Aelhan » 22 Mars 2020 16:47

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 !)
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

Répondre

Revenir vers « (C#) CSharp »