Jump to content
Unity Insider Forum

InputField String an double übergeben


coldstone

Recommended Posts

Hallo zusammen,

 

ich habe folgendes Problem.

Ich habe einen Input Field, wo ich Text eingeben kann. Dieser soll an eine double-Variable in einem anderen Skript übergeben werden.

Bekomme aber leider in der Console folgende Fehlermeldung:

FormatException: Input string was not in a correct format.

Das Skript welches den Input aufnimmt:

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using TMPro;

public class setGPSData : MonoBehaviour
{
    public GameObject latitude;
    public GameObject longitude;
    public GameObject GPSData;
    // Start is called before the first frame update
    public Button button;

    void Start()
    {
        Button btn = button.GetComponent<Button>();
        btn.onClick.AddListener(TaskOnClick);
    }

    void TaskOnClick()
    {
        GPSData.GetComponent<GPSTrackerVCar>().latVehicle = double.Parse(latitude.GetComponent<TextMeshProUGUI>().text);
        GPSData.GetComponent<GPSTrackerVCar>().lonVehicle = double.Parse(longitude.GetComponent<TextMeshProUGUI>().text);

    }
}

Die Variablen latVehicle + lonVehicle, sind double-Werte, welche im Skript "GPSTracker" vorhanden sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Sascha:

Moin!

Vermutlich ist dein String nicht im richtigen Format... wie er halt sagt?

Kann es z.B. sein, dass du da ein , hast, wo ein . erwartet wird?

Also ich gebe einfach reine Zahlen ein, ohne irgendwelche kommas oder punkte.

 

Wenn ich z.B. den eingegebenen Wert auf der Console direkt ausgebe, kommt die selbe Fehlermeldung.

    void TaskOnClick()
    {
        //GPSData.GetComponent<GPSTrackerVCar>().latVehicle = double.Parse(latitude.GetComponent<TextMeshProUGUI>().text);
        //GPSData.GetComponent<GPSTrackerVCar>().lonVehicle = double.Parse(longitude.GetComponent<TextMeshProUGUI>().text);
        double lon = double.Parse(longitude.GetComponent<TextMeshProUGUI>().text);
        double lat = double.Parse(longitude.GetComponent<TextMeshProUGUI>().text);

        Debug.Log(lon);
    }

Wenn ich aus dem double einfach einen String mache, dann gibt er mir den string richtig in der console aus:

    void TaskOnClick()
    {
        //GPSData.GetComponent<GPSTrackerVCar>().latVehicle = double.Parse(latitude.GetComponent<TextMeshProUGUI>().text);
        //GPSData.GetComponent<GPSTrackerVCar>().lonVehicle = double.Parse(longitude.GetComponent<TextMeshProUGUI>().text);
        string lon = longitude.GetComponent<TextMeshProUGUI>().text;
        string lat = longitude.GetComponent<TextMeshProUGUI>().text;

        Debug.Log(lon);
    }

Irgendwie scheint doch das umwandeln mit "double.Parse...", nicht zu funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, danke. Gibt halt so Sachen wir führende Nullen oder zu viele Stellen, aber 1256 sollte gehen. Gibt dir mal den Text direkt in der Konsole aus, dann Parse, dann das Ergebnis ausgeben:

var s = longitude.GetComponent<TextMeshProUGUI>().text;
Debug.Log(s);
var d = double.Parse(s);
Debug.Log(d);

Dabei müsste dir was komisches auffallen. Vielleicht hast du das Script mehrfach in der Szene und das, was den Fehler wirft, hat nen leeren String als Input oder so.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bau dir mal bitte ein Minimalbeispiel das nichts weiter macht als das, und bei dem auch nichts in der Szene los ist außer das.

double.Parse("543543")

funktioniert nämlich problemlos.

vor 3 Minuten schrieb coldstone:

Kann es irgendwie an den TextMeshPro - Input Field einstellungen liegen?

Kann man nicht ausschließen, aber ich sehe gerade nichts verdächtiges.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Minuten schrieb Sascha:

Bau dir mal bitte ein Minimalbeispiel das nichts weiter macht als das, und bei dem auch nichts in der Szene los ist außer das.

double.Parse("543543")

funktioniert nämlich problemlos.

Du meinst eine ganz neue Szene mit einem einfachen Canvas und einfachem InputField mit dem obigen Wert?

Link zu diesem Kommentar
Auf anderen Seiten teilen

So... keine Ahnung, warum das nicht funktioniert, aber bei InputFields gilt sowieso generell: Niemals die Text-Komponente direkt nehmen. Immer zum InputField gehen. Also statt

TextMeshProUGUI

nimmst du

TMP_InputField

und dann läuft's auch.

Ich wüsste trotzdem zu gerne, warum der andere string nicht will... 🤔

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Sascha:

So... keine Ahnung, warum das nicht funktioniert, aber bei InputFields gilt sowieso generell: Niemals die Text-Komponente direkt nehmen. Immer zum InputField gehen. Also statt

TextMeshProUGUI

nimmst du

TMP_InputField

und dann läuft's auch.

Ich wüsste trotzdem zu gerne, warum der andere string nicht will... 🤔

Ok, so läufts. Vielen dank für die unterstützung. ISt aber schon irgendwie komisch, daß mann den reinen Text nicht in double umwandeln kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie es der Name sagt, ist das ein Space, also Leerzeichen ohne Breite. Du siehst es also nicht. Es kann aber dafür genutzt werden um Wörter oder Werte von einander zu trennen, wenn sie z.B. über das Netz von A nach B transferiert werden. Da wird ja gerne aus vielen Werten ein String gebildet, der beim Epfänger dann ja wieder zerlegt werden muss.
Ein echtes Space, was du z.B. bei einem Straßennamen öfters mal hast, eignet sich also nicht als Trennzeichen, weil es ja innerhalb eines Blockes vorkommen kann.

Was ich auch noch nicht wusste, aber gleich oben in der Seite von Saschas Link steht: Man kann es sogar in Domainnamen nutzen und somit phishing betreiben.
Klar, du siehst ja nicht, dass da ein unsichtbares Leerzeichen drin ist und glaubst du wärst auf der richtigen Seite. Gemeine Sache, dass!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...