Jump to content
Unity Insider Forum

Zugriff auf Value einer Dictionary


nordseekrabe

Recommended Posts

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

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

Okay, offenbar müssen wir da nochmal durch...

  1. 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.

  2. 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

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...