coldstone Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 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 More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 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? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 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 More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 Welche Werte hast du denn da? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Das ist ein Input Field, wo ich im UI selbst Werte eingeben kann und dann auf einen Button klicke, welches die "TaskOnClick" - Methode ausführt, oder was meinst du mit "Werte"? 🙂 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 Na die Werte, die du da so eingibst Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Zahlen, wie z.B. 1256 oder 12324 😅 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 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 More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Gibt folgendes in der Console raus. (siehe Anhang) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Kann es irgendwie an den TextMeshPro - Input Field einstellungen liegen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 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 More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 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 More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 Genau, und mit einem einfachen Script das nichts macht außer parsen und loggen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Genau das selbe Problem Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 Das ist doch schon einmal etwas. Ich konnte das hier auch reproduzieren. Ich hab bestimmt gleich was... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 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 More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 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 More sharing options...
Sascha Geschrieben 31. August 2022 Melden Share Geschrieben 31. August 2022 HAH! Hab's gefunden. Die Text-Komponente hat noch ein Zero-Width Space (Unicode 8203) am Ende. Das könnte man wegkürzen, dann geht's. Aber man kann auch einfach das InputField nutzen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
coldstone Geschrieben 31. August 2022 Autor Melden Share Geschrieben 31. August 2022 Was muss ich denn unter einem " Zero-Width Space (Ascii 8203)" verstehen??? 😅 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 1. September 2022 Melden Share Geschrieben 1. September 2022 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 More sharing options...
Sascha Geschrieben 1. September 2022 Melden Share Geschrieben 1. September 2022 Wofür Text Mesh Pro da so ein Ding ranhängt, kann ich gerade nicht einmal erraten. Aber generell kann man sich merken: Man muss bei TMP immer mit Komponenten arbeiten, die "TMP_Irgendwas" heißen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.