Jump to content
Unity Insider Forum

coco07

Members
  • Content count

    25
  • Joined

  • Last visited

Community Reputation

0 Neutral

About coco07

  • Rank
    Member

Recent Profile Visitors

360 profile views
  1. coco07

    Game stottert mit 200 FPS

    Fehler ist behoben Ich habe V-Sync deaktiviert und beim Spielstart der statischen Variable "Application.targetframeRate" den Wert 60 zugewiesen. Seit dem läufts absolut flüssig!
  2. coco07

    Game stottert mit 200 FPS

    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
  3. coco07

    Game stottert mit 200 FPS

    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 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
  4. coco07

    Game stottert mit 200 FPS

    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
  5. 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
  6. coco07

    Unity2D Performance?

    Mark@ Ich teste das Game auf den beiden mobilen Geräten und da komme ich nicht über die 60fps hinweg. Allerdings wird es auf Android irgendwo eine Beschränkung geben. Mehr FPS bringen dem User wohl auch nicht mehr, außer, dass er sein Handy öfter laden darf Zer0Cool@ Ich hatte schonmal alles genau so eingestellt und da machte es keinen Unterschied, deswegen hatte ich VSync ohne Hintergedanken wieder aktiviert, um keinen Tearing-Effekt zu bekommen. Diese Einstellungen waren mir deshalb auch bekannt Allerdings frage ich mich, warum Unity hier nicht selbst die Dinge mit der Performance regelt, wenn es um mobile Apps geht. Mehr Sinn würde es machen, dass man die Quali hochschrauben kann, wenn man unzufrieden ist, und nicht anders herum :/ Danke euch zwei, damit muss ich erstmal leben. Wenn ich noch weitere relevante Performanceupgrades erziele, gebe ich euch Bescheid Dankeschön
  7. coco07

    Unity2D Performance?

    Zer0Cool@ Mit dem Shader hat es jetzt geklappt. Habe es beim ersten Mal wohl einfach verkehrt gemacht. Die Texturen sind jetzt sichtbar und die Performance gefühlt gestiegen Dankeschön nochmal Mark@ Habe VSync mal testweise deaktiviert. Das Game läuft zwar flüssiger als vorher, allerdings ist Gfx.WaitForPresent mit ca 5-10 ms noch immer im Profiler zu sehen :/ Dankeschön Ich bekomme jetzt dank diesen Änderungen aber fast konstante 60FPS auf dem Tablet und S3 Mini, was ausreichend sein sollte. Bin für weitere "versteckte" Optimierungen trotzdem weiterhin dankbar
  8. coco07

    Unity2D Performance?

    Vielen Dank für deine Hilfe Werde ich testen, sobald ich Zuhause bin und gebe dann Rückmeldung Edit: So, habe diesen Shader mal eingefügt(zum ersten Mal) und das Ergebnis ist weniger erfreulich :/ Ich habe einen Shader unter Create->Shader->Standard Surface Shader erstellt und deinen Code in das leere Dokument ausgeführt. Dann ein neues Material erstellt und deinen Shader zugewiesen. Ist es richtig, dass ich für jede Grafik, welche diese Shader nutzen soll, ein eigenes Material erstellen muss? Um das mal zu demonstrieren, wie das aussehen soll: Sobald diese im Vordergrund stehenden Grafiken im Bild sind, ruckelt es auf dem S3 Mini und Amazon Tablet so stark, dass die Figur beim springen 3 mal so lang in der Luft bleibt. Nehme ich diese raus, ist wieder alles blendend... (Wie gesagt, auf einem stärkeren Smartphone merkt man NICHTS).. Mit dem Shader sieht es so aus: Grüße Coco07 Edit2: Ich habe jetzt einfach mal ALLES in der Szene deaktiviert bis auf die Kamera. Gfx.WaitForPresent bleibt weiterhin bei über 10ms pro frame, obwohl nichts auf den Bildschirm gezeichnet wird. Das macht doch gar keinen Sinn :/
  9. coco07

    Unity2D Performance?

    Hallo Mr 3d, erst einmal vielen Dank für die Antwort Der Profiler sagt dazu folgendes: Obwohl hier 60FPS angezeigt werden, ruckelt das Spie, sobald ich in die Nähe der beiden Grafiken komme stark :/ Zer0Cool@ Danke für deine Antwort, hat sich gerade etwas überschnitten Es ist nur dieses eine Skript für den Player in der Szene aktiv. Dort wird in der Update Methode nur die Input-Behandlung abgearbeitet. Wenn ich dieses Skript auch noch deaktiviere, kann ich den Player nicht mehr steuern. Allerdings ruckelt es ja nicht, wenn ich diese beiden anderen übereinander liegenden Grafiken entferne. Der Profiler sagt ja auch, dass die CPU auf die GPU wartet. Kann mir allerdings nicht erklären, warum es so lange dauert 3 übereinander liegende Grafiken zu zeichnen :S
  10. coco07

    Unity2D Performance?

    Hallo Community, ich habe bei meinem neuen Spiel Performance-Probleme, welche ich einfach nicht lösen kann :/ Es handelt sich dabei um einen einfachen 2D Sidescroller. In der Szene vorhanden sind von hinten nach vorne ein Fullscreen Background, 2 breitere Hintergründe(übereinander mit etwas Transparenz), welche Gebäude simulieren und eine Figur im Vordergrund. Die 3 Layer, welchen einen realistischen Hintergrund darstellen sollen, sind einfach Grafiken, welche größtenteils aus nur einer Farbe bestehen. Die Spielfigur lässt sich durch einen Joystick steuern. Wenn ich nun die beiden Layer im Hintergrund entferne, läuft die Spielfigur mit Hilfe des Rigidbodys und der Interpolation sehr flüssig bei 200 FPS hin und her. Sobald die beiden Layer aktiv sind, bricht die Framerate auf rund 30 FPS runter. Als Material wird der "Sprite-Default"-Shader verwendet. Zur Komprimierung der Grafiken wird ein TextureAtlas benutzt. Durch stundenlanges Googlen habe ich dann irgendwann herausgefunden, dass das Phänomen wohl als "Overdraw" bezeichnet wird und dann zu Stande kommt, wenn Grafiken, wie der Name schon sagt, übereinander gezeichnet werden. Ist es normal, dass die Framerate von rund 200 FPS auf 30 runter bricht, wenn 3 Grafiken(ca 356x200 Pixel pro Sprite) übereinander gezeichnet werden? Dazu muss ich sagen, dass ich auf einem S3 Mini und einem Amazon Kindle HD 3.gen teste, weil ich das Game auch gerne auf Geräten mit nicht so viel Leistung laufen lassen möchte. Titel à la Candy Crush oder Temple Run(entwickelt mit Unity) laufen allerdings absolut flüssig auf Diesen. Auf nem LG G2 läuft mein Game wunderbar mit keinerlei Einbußen... Kann sich jemand einen Reim darauf machen? Grüße Coco07
  11. Hallo Community, Text schreibt man ja für gewöhnlich mit Hilfe einer Fontdatei aka .ttf. Problem dabei ist, dass die Font, welche ich ursprünglich nutzen wollte, transparent ist und Unity diese natürlich nicht mit Farbe füllen kann. Jetzt habe ich mir eine eigene Font(png) in Photoshop erstellt und würde diese nun gerne für Gui-Text einsetzen. Wie mache ich das am besten? Anders gefragt, wie ist der generelle Ablauf einer solchen Font-Erstellung? Macht man generell eine Vector Grafik für Fonts fertig oder lässt sich das auch via PNG und Hard-Coding "einfach" lösen? Wie handhabt ihr das? Mit freundlichen Grüßen Coco07!
  12. Halo Mr 3d, vielen Dank für deine Hilfe. Deine Lösung ist zwar nicht die Gesuchte, aber trotzdem der Denkanstoß für die Endgültige gewesen. Hier ist die Endgültige: Unity ist für 2D Animation nun wirklich alles andere als optimiert. LibGDX bietet hier wesentlich einfachere Eventsysteme an. Unity gefällt mir dahingehend überhaupt nicht.
  13. Hallo TobLine, würde nicht funktionieren. Ich brauche eine einmalig abgespielte Animation beim loslassen des Buttons. Deswegen der kleine Hinweis "Wie bei Candy Crush von King". Er soll praktisch diesen "bubble Effekt" nachahmen. Danke für deine Antwort
  14. Hallo Community, ich komme derzeit beim Animieren eines Buttons im Spiel nicht weiter. Animation in LibGDX waren ein einfaches Thema. In Unity scheint mir das sehr komplex zu sein. Wenn ich in der von Unity bereitgestellten Button Komponente "Transition" auf Animation stelle und dann in das Animations-Fenster wechsle, finde ich dort nur "Normal", "Highlighted", "Pressed" und "Disabled" als mögliche States, nicht aber "Released". Kann ich diesen State nur per Code animieren? Der Button soll beim Drücken kleiner skaliert werden und beim loslassen eine kleine Animation zeigen. Ähnlich wie bei Candy Crush von King. Gibt es eine andere Möglichkeit als diesen per Code zu animieren? Mit freundlichen Grüßen Coco07
  15. Hallo Community, ich schreibe gerade einen kleinen 2D-Shooter. Das Bewegen mit Hilfe der RigidBody2D Komponente und dem dazugehörigen NetworkTransform funktioniert inklusive der Animation-Synchronisierung auf allen Clients. Beim Schießen komme ich derzeit nicht weiter. Wenn ich die Kugel auf dem Server spawne, habe ich auf meinem eigenen Client eine Verzögerung. Die Kugel kommt also nicht mehr direkt aus der Waffe, sondern hinkt um die Zeit des Pings hinterher. public void CmdShoot(){ GameObject bullet = (GameObject) GameObject.Instantiate (bulletPrefab, spawnPosition.position, spawnPosition.rotation); bullet.GetComponent<Rigidbody2D> ().velocity = bullet.transform.right * BULLET_SPEED; NetworkServer.Spawn (bullet); } Die Lösung ist wohl "Client Side Prediction"? Also habe ich einfach eine Kugel lokal auf meinem eigenen Client gespawnt und die SpriteRenderer Komponente der Kugel, welche auf dem Server gespawnt wird, deaktiviert. Jetzt sehe ich meine eigene Kugel ohne Verzögerung direkt aus der Waffe fliegen. Die im Netzwerk aktive Kugel ist zwar nicht mit der lokalen Kugel synchronisiert, aber das macht nichts. Ich habe also 2 Kugeln pro Schuss -> Eine nur für mich sichtbare(fürs Optische) und die richtige im Netzwerk aktive Kugel(für Kollisionen usw.). Die Frage ist nun, wie ich die im Netzwerk aktive Kugel auch auf den anderen Clients sichtbar machen kann, da die SpriteRenderer Komponente ja deaktiviert ist. Wenn ich diese im Script der Kugel aktiviere, sehe ich natürlich meine lokale UND die im Netzwerk Aktive auf meinem eigenen Client. Optisch sieht das nicht wirklich berauschend aus. Gibt es dafür eine Lösung? Ich habe bereits versucht eine lokale Liste zu erzeugen und jede im Netzwerk gespawnte Kugel hinein zu legen. Funktioniert aber leider nicht, da der "Command" nur auf dem Server aufgerufen wird... Ich bin echt ratlos edit: Mit Client-Authority ist das Problem behoben, in dem ich in der Start Methode des Kugel-Scripts einfach die Bedingung if (!hasAuthority) { GetComponent<SpriteRenderer> ().enabled = true; } hinzufüge... Allerdings bekomme ich dann auf einem der beiden Clients eine Fehlermeldung: "HandleTransform no gameObject" in UnityEngine.Networking.NetworkIdentify: UnetStaticUpdate() Außerdem ist das wieder unnötiger Traffic, da die Kugel mit dem Server synchronisiert wird? MfG Coco07
×