Page 2 sur 2

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

Publié : 09 Sep 2019 19:01
par Chandala
En effet juste après le i (j'avais oublié que les + pouvaient encadrer comme les parenthèses et les crochets :] )

Alors, après examen rendu, j'ai obtenu ces informations via le Debug.Log :
data: nomDePerso,0.3,0.7,
UnityEngine.Debug:Log(Object)
NovelController:Command_MoveCharacter(String) (at Assets/Scripts/Core/Novel Controller/NovelController.cs:653)
NovelController:HandleAction(String) (at Assets/Scripts/Core/Novel Controller/NovelController.cs:495)
<HandlingLine>c__Iterator3:MoveNext() (at Assets/Scripts/Core/Novel Controller/NovelController.cs:437)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
NovelController:HandleLine(String) (at Assets/Scripts/Core/Novel Controller/NovelController.cs:363)
<HandlingChapterFile>c__Iterator0:MoveNext() (at Assets/Scripts/Core/Novel Controller/NovelController.cs:255)

Parameters[0]=nomDePerso
Parameters[1]=0.3
Parameters[2]=0.7
Parameters[3]=
Avec pour chaque Parameters[] les mêmes lignes en dessous que celles du data.

Dans les commandes à entrer dans la Novel en elle-même, j'ai ceci concernant le mouvement :
#Move character on screen
move(characterName,targetlocationX,targetlocationY) ex : move(Raelin,0.3,0.7)

*optional parameters
1. speed of movement. ex : move(Raelin,0.3,0.7,1.0)
2. smooth movement. ex : move(Raelin,0.3,0.7,1.0,false)
Du coup j'ai testé la commande move(nomDePerso,0.3,0.7,1.0), et même avec un false en plus ça ne change rien et l'erreur reste présente.

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

Publié : 09 Sep 2019 19:52
par Max
personnellement je commencerais déjà par voir pourquoi data semble tronqué lors de sa transmission à Command_MoveCharacter() (data: nomDePerso,0.3,0.7, )

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

Publié : 12 Sep 2019 17:16
par Chandala
Sans doute une erreur de ma part pour la virgule en plus, j'ai retesté depuis avec 3 données (characterName, targetlocationX et targetlocationY) et le Debug.Log indiquait bien ces 3 paramètres seulement (parameters[0], [1] et [2]).

Enfin... Ce sont des informations que je mets dans un document .txt où j'écris le script de la Novel, plus précisément ici le Chapitre0.txt. Visuellement ça donne quelque chose de la sorte :
setBackground(park,false,1) playMusic(Music)

enter(Character)

Character "Meh..."

move(Character,0.3,0.7)
Et ce qui ne convient pas ici c'est le float locationX = float.Parse(parameters[1]); , soit le 0.3.
Maintenant en quoi cette donnée n'est-elle pas dans un format correct ?

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

Publié : 12 Sep 2019 17:53
par Max
Chandala a écrit :
12 Sep 2019 17:16
Et ce qui ne convient pas ici c'est le float locationX = float.Parse(parameters[1]); , soit le 0.3.
Maintenant en quoi cette donnée n'est-elle pas dans un format correct ?
Essais plutôt non pas 0.3 mais 0,3 (virgule à la place du point).

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

Publié : 12 Sep 2019 18:29
par Chandala
Eh bien... Ça a fonctionné, mais du coup l'erreur s'est déplacée deux lignes plus loin ici :

Code : Tout sélectionner

float speed = parameters.Length >= 4 ? float.Parse(parameters[3]) : 7f;
move(Character,0,3,0.7)
J'imagine qu'il doit compter le 0 comme targetlocationX et le 3 comme targetlocationY.
Alors j'ai mis une virgule pour le 0.7 également pour obtenir un move(Character,0,3,0,7) et l'erreur s'est ensuite encore déplacée sur la dernière ligne du void Command_MoveCharacter :

Code : Tout sélectionner

bool smooth = parameters.Length == 5 ? bool.Parse(parameters[4]) : true;

J'ai donc rajouté un "false" pour le parameter[5] (donc on a à présent une commande move(Character,0,3,0,7,false)) et... Plus d'erreur ! 8| Mais le personnage qui ne bouge toujours pas.

La console indique à présent un : move Character to (0.0, 3.0)
Ce qui renvoie au Debug.Log d'une partie d'un code du Character.cs :

Code : Tout sélectionner

 public Vector2 _targetPosition
    {
        get { return targetPosition; }
    }
    Vector2 targetPosition;
    Coroutine moving;
    bool isMoving { get { return moving != null; } }
    /// <summary>
    /// Move to a specific point relative to the canvas space: (1,1) = far top right, (0,0) = far bottom left, (0.5,0.5) = middle.
    /// </summary>
    /// <param name="Target">Target.</param>
    /// <param name="speed">Speed.</param>
    /// <param name="smooth">If set to <c>true</c> smooth.</param>
    public void MoveTo(Vector2 Target, float speed, bool smooth = true)
    {
        Debug.Log("move " + characterName + " to " + Target.ToString());
        //if we are moving, stop moving.
        StopMoving();
        //start moving coroutine.
        moving = CharacterManager.instance.StartCoroutine(Moving(Target, speed, smooth));
    }
Donc... L'erreur vient bien des points dans les chiffres. J'ai testé avec d'autres données : move(Character,3,7,1,false) pour voir et mon perso s'est enfui à toute vitesse vers la droite et a disparu de l'écran ! ::d
Eh bien eh bien... Maintenant, comment peut-on faire des chiffres à virgule ou à point dans de telles conditions ? ...

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

Publié : 12 Sep 2019 18:37
par Max
Arf oui, il split le data à partir des virgules, donc forcément cela va fiche le bazar...

Donc remet le point, et à la place de

Code : Tout sélectionner

float locationX = float.Parse(parameters[1]);
essais:

Code : Tout sélectionner

float locationX = float.Parse(parameters[1], System.Globalization.CultureInfo.InvariantCulture);

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

Publié : 12 Sep 2019 18:49
par Chandala
Ça marche !! :pleur4: :coeur: :coeur: :coeur:

J'ai reçu une réponse en même temps de quelqu'un en Allemagne ayant eu aussi ce même problème et effectivement il proposait d'utiliser un "CultureInfo.InvariantCulture" pour les paramètres chiffrés (du genre float.Parse(parameters[2], CultureInfo.InvariantCulture).

Mais ça ne marchait pas encore, il faut effectivement un "System.Globalization.CultureInfo.InvariantCulture".
J'avais déjà lu qu'il fallait utiliser le CultureInfo mais je n'aurais vraiment pas deviné pourquoi précisément.

Fiou, ce fut laborieux mais c'est enfin résolu ! Merci infiniment Max pour ton aide ! :merci: :merci: :merci:
Je passe le topic en résolu ! ;)

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

Publié : 12 Sep 2019 20:19
par Max
pas de soucis, et bonne continuation.