Jump to content
Unity Insider Forum

Gameobjekte Ruckelfrei bewegen iOS


Robert O.

Recommended Posts

Hallo Gemeinde,

 

Ich bin jetzt seit mehreren Tagen an einer Sache drann und bekomme es nicht gelöst.

 

Folgendes Scenario:

 

In dem Spiel (2D) befinden sich ca. 60 Objekte (einfach nur ein Sprite) diese sollen sich in eine Richtung bewegen.

Ich habe an den Instanzierten Objekten ein Movescript angehängt was dafür sorgt das sie sich bewegen allerdings sobald sie etwas schneller werden fangen sie am Iphone an zu Ruckeln.

 

Da es ja mehrere Möglichkeiten gibt wie man Objekte bewegen kann hab ich auch mehreres Probiert:

 

Mit Rigidbody, ohne Rigidbody. mit oder ohne iTween, Transfom.position

in der Update in der FixedUpdate Methode.

Als Coroutine auch.

Immer der gleiche Effekt - es Ruckelt und sieht unschön aus.

 

Setze ich den Speed runter ist alles Top. Sobald es schneller wird ruckelt es.

An Beispielen wie DoodleJump etc sieht man ja aber das es Ruckelfrei gehen müsste.

 

Irgendwo liegt der haken und ich weis nicht wo.

Im Editor sieht ruckelt es etwas aber nicht so auffällig wie bei iOS.

Leistung der Hardware schliesse ich aber aus.

 

Hat irgendjemand den Entscheidenden Tip für mich?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bewegst du die Objekte alle einzeln, und wenn ja, muss das so sein - oder wäre es auch möglich, die Objekte alle unter ein Parent zu hängen und dann dieses Parent zu bewegen?

 

Die andere Frage wäre, was bei dir noch so passiert - ist es nur die Bewegung, die das Ruckeln verursacht, oder ist es eher so, dass du einfach eine niedrige Framerate hast und das bei schnelleren Bewegungen dann deutlich auffällt? Also: Wie sind deine Framerates?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bewegst du die Objekte alle einzeln, und wenn ja, muss das so sein - oder wäre es auch möglich, die Objekte alle unter ein Parent zu hängen und dann dieses Parent zu bewegen? Die andere Frage wäre, was bei dir noch so passiert - ist es nur die Bewegung, die das Ruckeln verursacht, oder ist es eher so, dass du einfach eine niedrige Framerate hast und das bei schnelleren Bewegungen dann deutlich auffällt? Also: Wie sind deine Framerates?

 

Also die Fragerate liegt bei ca. 190 bis 250fps

sollte also ok sein.

 

Ansonsten passiert da nicht viel anderes. Der Tip mit dem Parent werde ich mal versuchen da alle Objekte gleich bewegt werden müssen.

Ich melde mich dann nachher zurück.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wow, okay - bei 190 bis 250 FPS sollte da definitiv kein Ruckeln auftreten. Ich wusste ehrlich gestanden gar nicht, dass man auf iOS solche Framerates hinbekommt.

 

Die einzige Erklärung, die mir dazu dann einfällt ist, dass irgendwo ziemlich viel Garbage produziert wird und der Garbage Collector dann gelegentlich einen Frame verzögert ... kann es sein, dass es da noch irgendein Script gibt, das viele Objekte instanziiert? Strings oder sowas? Seltsam ist es so oder so, aber eine andere Erklärung fällt mir zumindest spontan nicht ein.

 

Für so etwas ist natürlich der Profiler extrem nützlich - ist aber ein Pro Feature. Damit kann man ziemlich schnell sehen, wenn irgendetwas in einzelnen Frames nicht stimmt (oder auch generell nicht stimmt).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Welchen Code hast du denn zum Bewegen in die verschiedenen Methoden gepackt? Es kann überall an der Performance liegen, aber bevor ich das weiter untersuche, würde ich erstmal schauen wollen, ob der Code nicht irgendetwas komisches macht.

 

Das wäre an sich auch meine erste Frage gewesen - aber weil Robert geschrieben hat:

 

Da es ja mehrere Möglichkeiten gibt wie man Objekte bewegen kann hab ich auch mehreres Probiert:

 

Mit Rigidbody, ohne Rigidbody. mit oder ohne iTween, Transfom.position

in der Update in der FixedUpdate Methode.

Als Coroutine auch.

Immer der gleiche Effekt - es Ruckelt und sieht unschön aus.

 

... dachte ich, dass es an irgendetwas Anderem liegen müsste, weil das ja ganz unterschiedliche Ansätze sind. Aber das liegt natürlich auch daran, dass ich, wenn ich "mit Rigidbody" lese davon ausgehe, dass die Bewegung dann von der Physik-Engine gesteuert wird ... was natürlich nicht sein muss (auch wenn es so sein sollte ;-) ). Und iTween ist ja sich auch eine Bibliothek, bei der man nicht so viel falsch machen und sich normalerweise darauf verlassen kann, dass das sauber läuft (wobei 60 Tweens dann vielleicht doch auch nicht der typischste Anwendungsfall sind ;-) ).

 

Ist besser keine Annahmen zu treffen und nochmal nachzufragen.

 

Allerdings flashen mich auch immer noch 190-250 FPS auf iOS. Bei Standalone Playern hab ich das schon oft gesehen ... aber ich hätte gedacht, dass auf iOS normalerweise bei 60 FPS automatisch zwischen den Frames kleine Wartezyklen eingebaut werden, um nicht zu viel Batterie zu verbrauchen. Aber vielleicht habe ich da auch einfach Accelerometer Frequency mit V Sync Count verwechselt :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meine Idee war z.B. dass der Code kein Time.deltaTime enthält, deswegen in Update unregelmäßig läuft, und in FixedUpdate der Pseudo-Asynchronität zum Rendern wegen Ruckeln entsteht.

Wie da iTween in's Schema passt, ist mir bisher rätselhaft, u.a. deswegen bin ich neugierig auf den Code :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...