Jump to content
Unity Insider Forum

Game stottert mit 200 FPS


coco07

Recommended Posts

Hallo liebe Community,

ich bin gerade dabei ein Game zu schreiben und habe heute das erste Mal auf meinen iOS-Geräten getestet.

Ergebnis war, dass das Game ohne Ende stottert bei (laut Profiler) ca. 200FPS auf dem iPad und 100FPS auf dem iPhone.
Was mich etwas stutzig macht war die Tatsache, dass ich dieses Problem zuerst auch auf Android Geräten hatte, welches ich beheben konnte, in dem ich in den Qualitysettings den VSync Counter auf "Every Blank" stellte. Ab da wurde im Profiler "WaitForTargetFPS" nicht mehr angezeigt und das Game läuft flüssig. Gibt es hier aktuell einen VSync Bug in Unity? Müsste es nicht genau anders herum sein? Bei VSync "on" sollte "WaitForTargetFPS" bei zu hoher FPS im Profiler angezeigt werden und nicht bei VSync "off", oder liege ich da falsch?

 

Bei iOS macht es keinen Unterschied, ob ich es an oder aus stelle, das Ergebnis bleibt das Gleiche --> Ca 100 - 200 FPS und das Game stottert wie sonst was und es spielt sich wie im "Slow-Motion Mode". Ich habe übrigens keine Positionsveränderungen in Update statt in FixedUpdate enthalten. Bei Touch wird einem Objekt einfach eine Geschwindigkeit zugewiesen, daher kann der Fehler also schon mal nicht kommen. Wäre ja auch seltsam, denn auf Android läufts absolut butterweich.

Habe mal ein Screenshot vom Profiler unter iOS beigefügt.

Ich bin für jegliche Antwort sehr dankbar :)

 

MfG
Coco07

 

Bildschirmfoto 2018-04-04 um 23.54.08.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Zer0Cool, die Peaks sind ja nicht mal das Problem. Das Game stottert ohne Ende bei 200FPS... Fühlt sich an wie 5-10 FPS und ist absolut unspielbar. Ich hätte eigentlich damit gerechnet, dass hier jemand "Unaccounted time between..." mit ca 30ms per frame anspricht. Ich finde bei Google absolut nichts darüber und Unity gibt mir schlichtweg zu wenig Infos. Mal abgesehen davon, dass 30ms per Frame mit 200FPS gar nicht möglich sind... Und das tritt überall auf, nicht nur bei den Peaks.

 

MfG

Coco07

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Wert "unaccounted time ... " sieht seltsam aus... Wenn dieser Wert einen Hänger von 30ms bei der CPU anzeigen sollte wäre das übel ...
Es könnte auch das Warten auf V-Sync sein und der Wert wird nur falsch angezeigt?

Kann es sein, daß deine Framerate auf dem Testgerät bei 30FPS liegt. Lass dich von den hohen FPS Zahlen des Profilers nicht täuschen. Am besten du baust mal einen FPS-Counter in dein Game ein, ich vermute der wird dann 30 FPS anzeigen.
iOS kann die Framerate auf 30 FPS drücken:
https://forum.unity.com/threads/ios-fixed-to-30-fps-application-targetframerate-doesnt-help.347825/

Aber wenn du konstant 30 FPS hast (oder mehr) und das Spiel ruckelt, dann stimmt vermutlich irgendwas anderes nicht ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

@coco07 Stottert auch ein neues Objekt, das ein simples Drehscript hat (transform.Rotate mit konstantem Wert mal Time.deltaTime in Update)?

Wenn ja, auch in einer ansonsten leeren Szene?

Das Ganze klingt nämlich so, als wäre die Framerate voll in Ordnung, aber deine Codebase nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zer0Cool, werde ich gleich mal testen --> Guter Tipp :)

Sascha@ Ja, selbst Animationen, die ich mit dem Animator gemacht habe, und simple Transform-Verschiebungen enthalten, laufen in Slowmotion und man sieht jedes einzelne Frame.
Ich kann mir auch nicht vorstellen, dass irgendwas am Code nicht peformant genug wäre, um das Spiel auf einem iPhone 7 nicht ruckelfrei anzeigen zu lassen, auf einem S3 mini aber schon.. WIe gesagt, auf Android butterweich und ich hatte gleiche Resultate, bevor ich bei Unity nicht VSync auf "every V Blanc" stellte und fälschlicherweise damit deaktiviert hab. Auf dem S3 Mini, LG G2 mini, LG g2 und nem alten HTC läufts ohne Probleme.

Ich habe jetzt mal das Menü auf dem iPad getestet. Außer UI Buttons und einem Partikelsystem(max 10 Partikel pro Sekunde), ist dort nicht enthalten --> kein eigener Code. Die Partikel bewegen sich in Zeitlupe...

Auch eine leere Szene zeigt im Profiler "unaccounted time between..." an :(

 

Ich füge mal den Profiler einer leeren Szene bei. Man sieht, auch hier sind Peaks enthalten

Bildschirmfoto 2018-04-04 um 23.54.08.png

 

edit: Ich habe jetzt mal ein Rotate-Script mit folgender Update Methode geschrieben:

void Update(){
        mTransform.Rotate(speed * Time.deltaTime);
    }

Geschwindigkeit ist auf Android und iOS natürlich gleich, auf dem iPad und iPhone allerdings alles andere als flüssig. Fühlt sich wie gesagt wie ca. 5-10 FPS an. Man kann einzelne Frames erkennen :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde mal ein leeres Projekt erstellen und dort eine quasi leere Szene und dort nur einen Würfel verschieben mit deiner obigen Methode..

Wenn dieser Build dann auch ruckelt, dann hast du ein Problem mit dem Build ... Vielleicht passen hier wieder OS Frameworkversion und Unity nicht zusammen oder ähnliches .. aber wie gesagt ein leeres Projekt, um ein "Fremdasset" welches das Build stören könnte auszuschließen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zer0Cool,

habe ich gerade gemacht. Gleiches Problem, flüssig ist was anderes...

Da zahlt man für Plus 40 Euro im Monat und Unity bekommt es nicht hin, das Build anständig zu exportieren. Sauber!
Ich werde mal weiter forschen und vielleicht bekomme ich das Problem ja demnächst in den Griff :)

Werde dann hier im Thread schreiben, sobald es läuft!

DANKE erstmal an euch 2 :):):)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 month later...

Archiviert

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

×
×
  • Neu erstellen...