nordseekrabe Geschrieben 12. Februar 2020 Melden Share Geschrieben 12. Februar 2020 public Dictionary<string, string> TheTargets = new Dictionary<string, string>(); ist ein Dictionary mit Städtenamen als Key und als Value Informationen zur Stadt. Wie greift man auf den string von Value zu, um ihn in einem UiText anzubinden ?? public static void LoadTheStadtInfo() { sceneName = SceneManager.GetActiveScene().name; // es wird der Szenenname der aktuellen Szene geprüft if (TheTargets.ContainsKey("sceneName")) // wenn dieser Stadtname in der Dictionary vorhanden ist { stadtText.text = TheTargets [Value]; soll der Value-Text dieser Stadt in der stadtText.text gespeichert werden; stadtText ist das TextUI in einem Canvas } } Leider funktioniert obige Funktion nicht. Für Hinweise oder Tipps bin sehr dankbar. Nordseekrabbe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hermetes Geschrieben 12. Februar 2020 Melden Share Geschrieben 12. Februar 2020 So vielleicht??? stadtText.text = TheTargets.Value.ToString(); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 12. Februar 2020 Melden Share Geschrieben 12. Februar 2020 Warum fragst du "sceneName" ab, steckst dann aber als Key "Value" da rein? Warum ist "sceneName" ein String-Literal? Da stimmen einfach ganz viele Basics nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
nordseekrabe Geschrieben 12. Februar 2020 Autor Melden Share Geschrieben 12. Februar 2020 Danke für Eure Reaktion. Grundaufbau: 50 Szenen mit einem Stadtbild einer Stadt (Name der Stadt ist der KeyString des Dictionary). Auf Buttonclick soll eine Beschreibung der Stadt gezeigt werden ( 2. String entsprechend Value des Dictionary). Die ca. 50 Städte als Collection (Array, List, Dictionary) zu erfassen, schien mir sinnvoll. Da zu jeder Stadt ein Text (Informationen) gehört, der bei Buttonclick auf dem Display gezeigt werden soll, dabei müssen StadtName und StadtInfo natürlich zusammenpassen, fand ich die Idee, mit einem Dictionary zu arbeiten, naheliegend. Leider ergibt sich nun für mich das Problem, wie auf den Text zugreifen und auf ein Canvas-Panel-UIText binden. Nordseekrabbe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Februar 2020 Melden Share Geschrieben 14. Februar 2020 Okay, offenbar müssen wir da nochmal durch... Zuerst einmal... sceneName ist nicht dasselbe wie "sceneName" Das erste ist ein Variablenname, das zweite ein Literal. Beispiel: var wort = "Hund"; Debug.Log(wort); // Gibt "Hund" aus. Debug.Log("wort"); // Gibt "wort" aus. Wenn du also TheTargets.ContainsKey("sceneName") schreibst, dann suchst du nach "sceneName" und nicht nach dem String-Wert von der Variable sceneName, der in der Zeile davor gesetzt wird. Was ist Value ? Wo definierst du das? Du musst ja in die eckigen Klammern entweder ein Literal oder einen Variablennamen reinpacken. (Oder sonst irgendeinen Ausdruck, der zu einem Wert evaluiert, so wie du 2+2 statt 4 schreiben kannst). In diesem Fall willst du ja offenbar den Namen der Szene als Schlüssel benutzen und den passenden Wert finden. Also musst du auch TheTargets[sceneName] schreiben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
nordseekrabe Geschrieben 15. Februar 2020 Autor Melden Share Geschrieben 15. Februar 2020 Danke, Sascha, verstanden. Die Funktion sieht inzischen so aus: public void LoadStadtInfo() { sceneName = SceneManager.GetActiveScene().name; Debug.Log("SceneName ist " + sceneName); // es wird der korrekte Stadtname der aktuellen Szene benannt, hier Bamberg if (TheTargets.ContainsKey(sceneName)) { stadtText = TheTargets[sceneName]; } } wobei "public Dictionary<string, string> TheTargets = new Dictionary<string, string>(); " und "string sceneName;" "public string stadtText;" deklariert sind (stadtText ist UIText) als Beispiel ein Element der Dictionary TheTargets.Add("Bamberg", "In mehr als 1000 Jahren ist ein einzigartiges historisches Stadtbild gewachsen....."); Leider erscheint der Fehler: "The given key was not present in the dictionary" Wo hat sich da ein Fehler eingeschlichen ? Nordseekrabbe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Februar 2020 Melden Share Geschrieben 15. Februar 2020 Benutze mal bitte den <>-Knopf über dem Textfeld, und packe da deinen Code rein, dann kann man den sogar lesen Erstmal: vor 2 Stunden schrieb nordseekrabe: "public string stadtText;" deklariert sind (stadtText ist UIText) Also, entweder die Variable ist vom Typ string, oder sie ist vom Typ UIText. Beides geht nicht. vor 2 Stunden schrieb nordseekrabe: Leider erscheint der Fehler: "The given key was not present in the dictionary" Bei diesem Code: if (TheTargets.ContainsKey(sceneName)) { stadtText = TheTargets[sceneName]; } kann dieser Fehler unmöglich™ auftreten. Leere einmal deine Konsole (nicht, dass das ein alter Fehler ist, der einfach immer noch in der Liste steht, obwohl er nicht mehr aktuell ist) und schaue danach, in welcher Zeile er wirklich auftritt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
nordseekrabe Geschrieben 15. Februar 2020 Autor Melden Share Geschrieben 15. Februar 2020 Okay, Fehler ist weg, nachdem ich { } nach der if-Abfrage hinzugefügt habe. Hatte ich nach Hinzufügen von Debug.Log vergessen, so schnell entstehen (banale) Fehler mit schweren Folgen. public static void LoadTheStadtInfo(string _stadtText) { sceneName = SceneManager.GetActiveScene().name; Debug.Log("sceneName ist " + sceneName); if (TheTargets.ContainsKey(sceneName)) { Debug.Log("sceneName ist" + sceneName); stadtText = TheTargets[sceneName]; } } In der Klasse "Stadt" ist stadtText ein string, in der Klasse "InputFieldScript" ist stadtText eine public Text Variable. Deshalb erscheint wohl bislang im UI-Text kein Text. In der Funktion "ShowInfo()" fehlt ja wohl noch die Verbindung. public void ShowInfo() { InfoText.enabled = true; SceneActivate(); Stadt.LoadTheStadtInfo(Stadt.stadtText); stadtText.text = Stadt.stadtText; Obwohl keine Fehlermeldung auftaucht, bleibt der erhoffte Text aber aus. Nordseekrabbe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 15. Februar 2020 Melden Share Geschrieben 15. Februar 2020 Du übergibst einen string "_stadtText" (warum auch immer der Parametername mit Unterstrich anfängt...) und machst damit nichts. Ich bin mir recht sicher, dass das so nicht richtig ist Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
nordseekrabe Geschrieben 15. Februar 2020 Autor Melden Share Geschrieben 15. Februar 2020 Stimmt, daher auch kein Text. Habe die Funktion "LoadTheStadtInfo() gestrichen. Die Klasse "Stadt" enthält nur noch die Elemente des Dictionary. Die Funktion "ShowInfo()" sieht so aus: public void ShowInfo() { InfoText.enabled = true; SceneActivate(); sceneName = SceneManager.GetActiveScene().name; stadtText.text = Stadt.TheTargets[sceneName]; } Das Stadt-Script wurde einem Empty GameObject zugewiesen und voila, it works !!!.......Bis zu den nächsten Hürden. Besten Dank, Sascha und ein schönes Wochenende Nordseekrabbe 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.