有没有办法用反射或其他方法来改变Unity的Time.deltaTime值。我们有一个重放系统,主要用于搜索bug。它存储了所有的输入事件和delta时间值,我们可以完全相同地模拟游戏。但是要强制delta时间值,我们必须定义并使用一个自定义的deltaTime变量。我想去掉这个变量,也强制Unity。的系统来使用我们的价值。
class SystemManager
{
List<System> systems;
void Update()
{
if(replay)
{
DTime.deltaTime = deltaTimeBuffer.GetValue();
}else
{
DTime.deltaTime = Time.deltaTime;
}
foreach system in systems
system.Update();
}
}
class System
{
void Update()
{
position += DTime.deltaTime * velocity;
// I want to get rid of DTime.deltaTime and use Time.deltaTime
}
}
1条答案
按热度按时间lymgl2op1#
使用反射更改平台范围内的已知变量可能会导致一些奇怪的错误,例如,团队中的“新开发人员”将不知道该特性,并且必须知道为什么他的deltaTime不是他所期望的。
不管这个题外话-也许不完全改变deltaTime直接,但你可以改变你的目标帧速率。
https://docs.unity3d.com/ScriptReference/Application-targetFrameRate.html
因为增量时间正好是:
从最后一帧到当前帧的时间间隔(以秒为单位)(只读)。
来源:https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
通过计算新的目标帧速率(如果您的机器能够稳定地工作在该帧速率),您可能会得到您想要的deltaTime。