保持跟踪已用时间C#/ Unity
问题描述:
我正在用C#和Unity创建一个节奏游戏,我一直没能找到我的一些玩家遇到的问题和他们的硬件之间的直接关系,随着时间的推移,他们在逐渐从音乐中脱离出来的游戏方面遇到问题。它通常需要几分钟才会显而易见,但它肯定会发生,并会破坏游戏的感觉。保持跟踪已用时间C#/ Unity
我通过使用double并添加Time.deltaTime(帧之间的时间)来跟踪已用时间,并且我假设只有非常小的精度错误与此相关,这就是导致逐渐desyncs。
有没有更好的方法来做到这一点更准确?我在想,获得游戏开始的时间,然后在每一帧减去当前时间可能会使它更准确?我试着将游戏时间同步到音频时间(Bass.NET提供了一种在几秒钟内获得歌曲位置的方法),但尽管这适用于我和其他一些人,但它最终还是会让其他人拥有像样的硬件口吃(我的游戏即使是8-10岁的个人电脑也能正常运行)。
答
根据您的需要,您可以使用Time.timeSinceLevelLoad,Time.realtimeSinceStartup(尽管建议您使用Time.time),或者最有可能的是Time.time。如果使用Time.timeScale暂停游戏,则可以使用Time.unscaledTime。
Time.realtimeSinceStartup和Time.time之间的区别在于,即使您用Time.timeScale暂停游戏,Time.realtimeSinceStartup也会继续计数。假设用户可能会暂停游戏,这可能会或可能不会阻止您的音频播放,这将有助于您制定是否要使用哪个属性的策略。根据您的游戏逻辑,您可能需要将Application.runInBackground
设置为true
以获得最可靠的结果。
您可以尝试使用DateTime来代替。 – Everts
在Unity中'Time.deltaTime'是做计时的最准确的方法。如果你可以解释你如何使用它来代码并发布你的代码,也许其他人可以想出更好的方法。 – Programmer
我解释过我是如何使用它的,我有一个双倍的增加Time.deltaTime到每一帧。 –