2017-10-15 2 views
3

Ich erstelle ein Rhythmusspiel in C# und Unity, und ich konnte keine direkte Korrelation zwischen den Problemen einiger meiner Spieler und ihrer Hardware feststellen, aber einige davon Sie haben Probleme mit dem Gameplay, das sich im Laufe der Zeit von der Musik entfernt. Es dauert normalerweise ein paar Minuten, bis es auffällt, aber es passiert definitiv und ruiniert das Gefühl des Spiels.Verfolgen der verstrichenen Zeit C#/Unity

Ich verfolge die verstrichene Zeit, indem ich ein Double verwende und Time.deltaTime (die Zeit zwischen Frames) hinzufüge, und ich nehme an, dass es nur sehr kleine Präzisionsfehler gibt, die damit verbunden sind, und das ist es verursacht die allmählichen desyncs.

Gibt es einen besseren Weg, dies genauer zu tun? Ich denke, dass die Zeit, in der das Gameplay gestartet wurde, und dann, wenn jedes Frame von der aktuellen Zeit subtrahiert wird, es genauer machen könnte? Ich habe versucht, die Gameplay-Zeit mit der Audio-Zeit zu synchronisieren (Bass.NET bietet eine Möglichkeit, Song-Position in Sekunden zu bekommen), aber während das für mich und einige andere funktioniert, bringt es andere mit anständiger Hardware zum Stottern (mein Spiel läuft in der Regel auch auf 8-10 Jahre alten PCs).

+0

Sie können stattdessen versuchen, DateTime zu verwenden. – Everts

+0

In Unity 'Time.deltaTime' ist die genaueste Art, Timing-Sachen zu machen. Wenn Sie erklären können, wie Sie es für Ihren Code verwenden und Ihren Code veröffentlichen, können andere vielleicht einen besseren Weg finden. – Programmer

+0

Ich habe erklärt, wie ich es benutze, ich habe ein Double, dass ich Time.deltaTime zu jedem Frame hinzufüge. –

Antwort

1

Je nach Ihren Anforderungen können Sie Time.timeSinceLevelLoad, Time.realtimeSinceStartup verwenden (obwohl Sie stattdessen Time.time verwenden sollten) oder höchstwahrscheinlich Time.time. Wenn Sie Time.timeScale verwenden, um Ihr Spiel anzuhalten, können Sie Time.unscaledTime verwenden.

Der Unterschied zwischen Time.realtimeSinceStartup und Time.time ist, dass Time.realtimeSinceStartup weiter zählt, auch wenn Sie Ihr Spiel mit Time.timeScale pausieren. Angenommen, die Benutzer könnten Ihr Spiel pausieren, was die Wiedergabe Ihres Audiomaterials möglicherweise stoppt oder nicht, würde Ihnen helfen, zu entscheiden, ob Sie welche Eigenschaft verwenden möchten. Sie können auf true setzen, um die zuverlässigsten Ergebnisse zu erhalten, abhängig von Ihrer Spiellogik.

Verwandte Themen