2017-05-25 26 views
0

Ich baue gerade ein Tutorial für ein Spiel.Umschalten von Fällen auf Klick; C#, Unity

Ich versuche, durch vorgefertigte Text mit einer switch-Anweisung zu durchlaufen. Die switch-Anweisung wird von einem Zähler gesteuert, der beim Klicken auf die Schaltfläche "next" inkrementiert wird. Der Code für den Schalter ist unter:

public void tutMGR(){ 
    switch (nextCount) { 

    case 0: 
     tutText.text = "1"; 
     break; 

    case 1: 
     tutText.text = "2"; 
     break; 

    default: 
     break; 
    } 

Der Button-Code ist:

public void nextCnt(){ 
     nextCount++; 
    } 

Im Inspektoren, die nextCount steigt. Wenn ich den Wert im Inspektor vor dem Ausführen des Spiels ändere, zeigt die case-Anweisung den gewünschten Text an. Ich kann es einfach nicht ändern, während das Spiel läuft.

Irgendwelche Vorschläge?

+0

Können Sie klären, welche Bildschirmklassen Sie verwenden? Winforms oder WPF? Welche Art von Objekt ist TutText und wie ist Ihr Bildschirm aufgebaut? – markshancock

+0

tutText ist ein öffentliches Textobjekt. Ich habe keine Ahnung, ob ich eine dieser Bildschirmklassen verwende. Ich habe ein Textfeld Objekt, Lerntext, in der Hierarchie erstellt. Ich habe dieses Objekt dem TutText meines Spielmanagers zugewiesen. Die Idee ist, dass der Text in diesem Textfeld basierend auf der switch-Anweisung geändert wird. –

Antwort

1

Es kann sein, dass der Text sich ändert; aber das Objekt weiß nicht, dass es sich geändert hat; Der Bildschirm wird also nicht neu gezeichnet.

Der Aufruf von 'tutText.Update()' könnte Ihr Problem lösen.

Eine andere Sache zu prüfen ist die Verwendung einer Dictionary anstelle einer switch-Anweisung für einfache Übersetzungen wie diese. Zum Beispiel ein int spanischen Text zu übersetzen, können Sie:

Dictionary<int,string> spaNums = new Dictionary<int,string>() 
{ 
    {1,"uno"}, 
    {2,"dos"}, 
    {3,"tres"}, 
} 

tutText.text = spaNums[nextCount]; 

Nun, wenn Sie eine neue Zuordnung hinzufügen möchten Sie gerade einen neuen Eintrag in das Wörterbuch und keine Codeänderung erforderlich hinzufügen.

Beachten Sie, dass, wenn alles, was Sie gerade eine Textübersetzung tun möchte, ist Sie

tutText.text = nextCount.ToString(); 

Als ToString() ist auf alle Objekte innerhalb von C#

+0

Bessere Idee, verwenden Sie ein Array. Arrays sind bereits integer-keyed. – Draco18s

+0

Ein Array funktioniert auch; aber es erfordert eine 1-zu-1-Zuordnung jeder Zahl. Ich war mir nicht sicher, ob das seine Absicht war. Ich wollte auch einen allgemeineren Ansatz zeigen, bei dem der Schlüssel keine ganze Zahl sein muss. – markshancock

+0

Sein Knopf erhöht eine Zählervariable, so dass seine Absicht wahrscheinlich kontinuierlich ist. – Draco18s

1

ich es Festsetzung landete verfügbar nutzen könnten! Alles, was ich tun musste, war die Switch-Anweisungen in der Tastenfunktion selbst setzen, so dass es endete wie folgt aufzublicken:

public void nextCnt(){ 
    nextCount++; 

    switch (nextCount) { 

    case 1: 
     tutText.text = "1"; 
     break; 

    case 2: 
     tutText.text = "2"; 
     miniMap.gameObject.SetActive (true); 
     break; 

    default: 
     break; 
    } 
} 

Es scheint, wie es so weit arbeiten. Danke für die Hilfe.

+0

Beachten Sie, dass ein Dictionary eine sauberere Lösung als eine switch-Anweisung sein kann. Wenn Sie mehr Informationen dazu wünschen, lassen Sie es mich wissen und ich werde die Informationen als Antwort hinzufügen, damit ich die Formatierung verwenden kann (einschließlich Code in einem Kommentar funktioniert wirklich nicht). – markshancock

+0

Ja, ich würde gerne Ihre Eingabe lesen! –