Sie sollten die Text
Komponente nicht OnGUI()
oder irgendetwas aus der GUI Klasse verwenden.
Wie kann ich sie jedoch auf eine gute Weise anzeigen? Ich denke, ich könnte 1 Textobjekt für jeden High-Score erstellen, aber das würde eine Menge von Spiele-Objekten erstellen und scheint eine schlechte Idee.
Object Pooling hätte hier gut, aber, da Sie nur9
Texte benötigen, erstellen Sie einfach Arrays von Texts
. Wenn Sie hohe Punktzahlen anzeigen möchten, laden Sie Ihre Punktzahlen, indem Sie die GetHighScores()
-Funktion aufrufen, dann das Array mit Texts
durchlaufen und das Ergebnis speichern. Sie können dann Text.enabled
auf true
setzen, um die Texts
anzuzeigen.
Um die Ergebnisse auszublenden, führen Sie eine einfache Schleife über das Text-Array und setzen Sie dann jeweils eine leere Zeichenfolge und setzen Sie dann Text.enabled
auf false
.
Das Skript deblow implementiert, was ich oben sagte. Erstellen Sie einfach 9 Texte aus dem Editor, ändern Sie die High Scores-Größe in 9
und ziehen Sie jede in die Element-Slots der Reihe nach.
public Text[] highScores;
public void hideHighScore()
{
for (int i = 0; i < 9; i++)
{
highScores[i].text = "";
highScores[i].enabled = false;
}
}
public void showHighScore()
{
SortedList<string, int> hScores = GetHighScores();
for (int i = 0; i < 9; i++)
{
string tempName = "Highscore " + (i + 1);
highScores[i].text = hScores[tempName].ToString();
highScores[i].enabled = true;
}
}
private SortedList<string, int> GetHighScores()
{
SortedList<string, int> tempList = new SortedList<string, int>();
for (int i = 1; i < 10; i++)
{
string tempName = "Highscore " + i;
tempList.Add(tempName, PlayerPrefs.GetInt(tempName));
}
return tempList;
}
Da Sie die Menge der Daten kennen, die Sie speichern müssen, die 9 ist, gibt es keinen Grund SortedList
oder List
zu verwenden. Sie können dafür einfach ein Array verwenden und verhindern, dass bei der Verwendung von SortedList
die unnötige Speicherzuweisung durchgeführt wird.
Ich hätte nie gedacht, dass Sie einfach Text [] sauber und einfach machen können, und ich werde von einer sortierten Liste zu einem Array wechseln. Prost. –
Sie können wahrscheinlich alle Text-UI-Objekte in einen Container einfügen und deaktivieren/aktivieren. Und bei Deaktivierung müssen Sie es wahrscheinlich nicht einmal ändern, weil Sie es vor der Aktivierung ändern. –
@GunnarB. Ja, Er könnte das tun. Setzen Sie es in ein Panel und aktivieren oder deaktivieren Sie das Panel. Er braucht auch nicht 'highScores [i] .text =" ";. Ich hatte es dort, um Text leer zu machen, während deaktiviert. Ich bin mir nicht sicher, ob das nützlich ist. – Programmer