Warum stürzt mein Unity Spiel bei diesem Code auf 8 FPS runter?


18.09.2024, 21:17

Ich hoffe das kann man erkennen

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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;
    }
  }
}

Stellarian05 
Beitragsersteller
 19.09.2024, 21:31

Super danke! Ich werde es probieren!

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.

Woher ich das weiß:eigene Erfahrung – Langjähriger Poweruser & praktische Programmiererfahrung

Stellarian05 
Beitragsersteller
 18.09.2024, 21:35

Danke

Wie JanaL161 schrieb, ist der Sleep Aufruf problematisch.

Wenn du da zwingend eine Verzögerung haben möchtest, würde ich eine Coroutine verwenden.


Stellarian05 
Beitragsersteller
 18.09.2024, 21:36

ok danke ich werde es ausprobieren