2017-10-15 114 views
3

我正在用C#和Unity創建一個節奏遊戲,我一直沒能找到我的一些玩家遇到的問題和他們的硬件之間的直接關係,隨着時間的推移,他們在逐漸從音樂中脫離出來的遊戲方面遇到問題。它通常需要幾分鐘纔會顯而易見,但它肯定會發生,並會破壞遊戲的感覺。保持跟蹤已用時間C#/ Unity

我通過使用double並添加Time.deltaTime(幀之間的時間)來跟蹤已用時間,並且我假設只有非常小的精度錯誤與此相關,這就是導致逐漸desyncs。

有沒有更好的方法來做到這一點更準確?我在想,獲得遊戲開始的時間,然後在每一幀減去當前時間可能會使它更準確?我試着將遊戲時間同步到音頻時間(Bass.NET提供了一種在幾秒鐘內獲得歌曲位置的方法),但儘管這適用於我和其他一些人,但它最終還是會讓其他人擁有像樣的硬件口吃(我的遊戲即使是8-10歲的個人電腦也能正常運行)。

+0

您可以嘗試使用DateTime來代替。 – Everts

+0

在Unity中'Time.deltaTime'是做計時的最準確的方法。如果你可以解釋你如何使用它來代碼併發布你的代碼,也許其他人可以想出更好的方法。 – Programmer

+0

我解釋過我是如何使用它的,我有一個雙倍的增加Time.deltaTime到每一幀。 –

回答

1

根據您的需要,您可以使用Time.timeSinceLevelLoad,Time.realtimeSinceStartup(儘管建議您使用Time.time),或者最有可能的是Time.time。如果使用Time.timeScale暫停遊戲,則可以使用Time.unscaledTime

Time.realtimeSinceStartup和Time.time之間的區別在於,即使您用Time.timeScale暫停遊戲,Time.realtimeSinceStartup也會繼續計數。假設用戶可能會暫停遊戲,這可能會或可能不會阻止您的音頻播放,這將有助於您制定是否要使用哪個屬性的策略。根據您的遊戲邏輯,您可能需要將Application.runInBackground設置爲true以獲得最可靠的結果。