Jump to content
Unity Insider Forum

Geschwindigkeits (FPS) unterschiede verhindern?


Series

Recommended Posts

Guten Abend.

 

Ich bin gerade dabei zu überlegen wie ich verhindere das schnelle PCs, die in meinem Spiel mehr FPS haben und somit die Update() Funktion öfters aufrufen z.b. beim Laufen schneller sind als andere PCs.

 

Würde mich über eine Lösung freuen :)

 

Mfg. Series

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nutze die FixedUpdate() Funktion!!!

Diese Funktion wird über die Zeit gesteuert und ist somit unabhängig von der Framerate.

 

Außerdem solltest du bei physikalischen Bewegungssteuerungen auch die Deltatime als Multiplikator nutzen.

Deltatime ist die Zeit, die zwischen den Frames vergangen ist. Ist die Zeit kurz (super Graka) dann ist der Multiplikator klein. Ist die Zeit lang, dann ist Multiplikator groß.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast Timo Weiße

FixedUpdate( ) ist hauptsächlich für z.B. die physikalischen Abläufe gedacht.. also die Physikengine. ( z.B. Raumschiffantriebskraft pro Sekunde )

In Update( ) kannst Du auch die Time.deltaTime benutzen.. für z.B. die Ablaufgeschwindigkeit von grafischen Spezialeffekten.

 

Du multiplizierst Time.deltaTime dann einfach mit Deinem Wert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auch hier muss ich leider wiedersprechen. Ich kann das FixedUpdate nicht nur an einen RigidBody oder die Physik festmachen.

Zur Erklärung ein kleines Beispiel:

 

Ich will über OnMouseDown() etwas tun und nutze dafür die Addition eines Wertes der nicht immer gleich ist.

Wenn die Berechnung des Wertes jetzt im Update stattfindet wird bei jedem Frame addiert, solange ich die Maus drücke.

Ja, und da passiert diese Berechnung je nach Grafikkarte schneller oder auch nicht.

Im FixedUpdate passiert das immer nach der Fixed Zeit. Egal, welche Framerate ich habe.

 

Wir arbeiten zwar mit einer 3D Engine und vermeintlich bewegen wir uns in einem Raum fließend. Das muss aber nicht so sein. Es kann durchaus mit festen Werten passieren und eine Animation gaukelt uns die fließende Bewegung nur vor. Oder aber es soll einfach nicht mit der Multiplikation von DeltaTime verkleinert werden, da ich den Festwert brauche.

Klar kann ich jetzt irgendwo eine Zeitschleife einbauen oder über einen Code solange warten, bis der gewünschte Wert erreicht wird. Aber warum? Wenn mein Fixed Update doch genau das tut, was ich will?

 

Bei euch klingt es immer so als wäre FixedUpdate "Böse!" und nur erlaubt, wenn etwas physikalisches im Spiel ist. Das prangere ich an! :P

Ich sehe es ganz anders und nutze es für die Synchronisation, wo ich mit DeltaTime nicht weiter komme.

So! :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast DynamicHead

Ich will über OnMouseDown() etwas tun und nutze dafür die Addition eines Wertes der nicht immer gleich ist.

Wenn die Berechnung des Wertes jetzt im Update stattfindet wird bei jedem Frame addiert, solange ich die Maus drücke.

Du meinst sicher OnMouseDrag( ) und nicht OnMouseDown( ), denn OnMouseDown( ) wird nur einmal pro Mauseklick aufgerufen. Bei gedrückter Mausetaste ist es OnMouseDrag( ). B)

 

Sonst ist es ein interessanter Denkansatz, malzbie. :)

 

Kannst du das mal erklären und begründen? Mich würd jetzt echt mal interessieren warum man die nicht benutzen soll.

 

Die Abläufe in Update( ) sind wesentlich flüssiger und Update( ) wird jedes einzelne Frame ausgeführt. FixedUpdate( ) wird hingegen in regelmäßigen zeitlichen Abständen ausgeführt. Also wenn Du jedes Frame etwas machen möchtest, dann ist FixedUpdate( ) einfach unbrauchbar dafür.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kannst du das mal erklären und begründen? Mich würd jetzt echt mal interessieren warum man die nicht benutzen soll.

 

Selbst, wenn es nicht wie von DynamicHead erwähnt wäre, gibt es einen hanz einfachen Grund, warum man es nicht tun sollte:

FixedUpdate ist nicht dafür da.

Unity Technologies sagt: FixedUpdate ist für Rigidbodys, für alles andere gibt's Time.deltaTime.

Nur, wenn man sich daran hält, was die sagen, ist gewährleistet, dass das eigene Script immer so funktioniert, wie es soll.

Hält man sich nicht an die gegebene Konvention, dann kann es sein, dass unter irgendwelchen komischen Umständen (z.B. veralteter PhysX-Support beim Client), oder bei zukünftigen Builds der Engine, dein Script nicht mehr richtig funktioniert.

 

Ist ein einfacher Grundsatz: Halte dich an die Konventionen derer, deren Black Box du benutzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...