Warum stürzt mein Unity Spiel bei diesem Code auf 8 FPS runter?
Moin, ich programmiere Spiele mit Unity. Bin noch relativ ein Anfänger.
Wenn ich das Skript nicht drin hab läuft alles normal. Wie kann ich es optimieren, warum ist das so? Ich habe versucht eine Scoreanzeige zu programmieren
Ich hoffe das kann man erkennen
3 Antworten
Jeglicher Code der in Update oder FixedUpdate aufgerufen wird, sollte so performant wie möglich sein. Mit Thread.Sleep machst du genau das Gegenteil, generell ist Thread.Sleep in diesem Kontext eigentlich nie gut.
Hier dein Code wie man ihn normalerweise in Unity implementieren könnte (ungetestet):
Eventuell könnte man sich für das while(true) noch etwas schöneres einfallen lassen.
public class ZexzControl : MonoBehaviour
{
[SerializeField] private int score;
[SerializeField] private TMP_Text text;
private void Start()
{
StartCoroutine(UpdateScore());
}
private IEnumerator UpdateScore()
{
while (true)
{
yield return new WaitForSeconds(0.1f);
text.text = "Score: " + ++score;
}
}
}
Du lässt den Thread für 100ms schlafen. Bei 60fps muss jedes Bild jedoch in weniger als 16ms gezeichnet werden.
Du wirst eine andere Methode erarbeiten müssen, um diese Verzögerung herbeizuführen, sodass das Spiel derweilen weiterlaufen kann.
Wie JanaL161 schrieb, ist der Sleep Aufruf problematisch.
Wenn du da zwingend eine Verzögerung haben möchtest, würde ich eine Coroutine verwenden.