Series Geschrieben 23. April 2011 Melden Share Geschrieben 23. April 2011 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 More sharing options...
malzbie Geschrieben 23. April 2011 Melden Share Geschrieben 23. April 2011 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 More sharing options...
Gast Timo Weiße Geschrieben 24. April 2011 Melden Share Geschrieben 24. April 2011 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 More sharing options...
Sascha Geschrieben 24. April 2011 Melden Share Geschrieben 24. April 2011 Ja, bitte abgewöhnen, FixedUpdate für was anderes als Rigidbodys zu benutzen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 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! Ich sehe es ganz anders und nutze es für die Synchronisation, wo ich mit DeltaTime nicht weiter komme. So! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Albion Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 Ja, bitte abgewöhnen, FixedUpdate für was anderes als Rigidbodys zu benutzen. Kannst du das mal erklären und begründen? Mich würd jetzt echt mal interessieren warum man die nicht benutzen soll. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Gast DynamicHead Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 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( ). 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 More sharing options...
Sascha Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 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 More sharing options...
malzbie Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 Wusste ich garnicht, dass die das sagen. Hast du mal einen Link zu dazu? Mich würde mal interessieren, was di noch alles festgelegt haben. Ich habe nämlich sowas noch nirgens gelesen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Albion Geschrieben 25. April 2011 Melden Share Geschrieben 25. April 2011 und ich dacht halt das man für nicht wirklich spielerelevante zeitunkritische Funktionen lieber die fixed update nimmt weil man da nicht jedes frame dann programmzyklen für verschwendet....na dann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 26. April 2011 Melden Share Geschrieben 26. April 2011 Steht in irgendwelchen offiziellen Tutorials und des weiteren in der Scripting Reference über Update() und FixedUpdate(). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.