游戏开发中deltatime(时间增量)的作用

在游戏开发中,若我们要让一个物体移动,通常的做法如下:

Update()
{
	  MyObject.transform.y += Speed*Time.deltaTime;
}

即在Update()中( UE4中为Tick() ) 让物体的移动属性+=需要移动的速度*Time.deltaTime。

其中移动速度很好理解,就是想要物体在1秒内移动的距离,那么后边那个神秘的deltaTime是什么呢?为什么在众多游戏开发教程中,都要求我们乘上这个deltaTime呢?

先说结论:乘以deltaTime是为了让物体移动的距离在不同的刷新率的游戏环境中保持一致。

先来回想一下Update()方法的定义:

Update is called every frame, if the MonoBehaviour is enabled. Update is the most commonly used function to implement anykind of game behaviour.

可以看见,Update()方法在游戏运行的每一帧都会执行。
那么问题来了,不同的刷新率的情况下Update()方法执行的次数会不一样

例如60HZ刷新率的情况下,Update() 方法1秒会执行60次; 而在120HZ刷新率的情况下,Update()会在1秒执行120次。

假设物体速度为Speed,即1秒钟移动Speed单位距离,那么
60HZ下, 物体移动距离为 60Speed
120HZ下, 物体移动距离为120
Speed

两者距离不同!这可是个大麻烦。如果在游戏中对手天生比我们移动距离远,那我们技术再强,也无法应付。

这个时候就需要我们的deltaTime出场了!

再看看deltaTime的定义:

The interval in seconds from the last frame to the current one (Read Only).

可以发现,deltaTime是指游戏中刷新一帧所需要的时间,这个时间是随着刷新率的变化而变化的。

60HZ刷新率下deltaTime就是1/60
120HZ刷新率下deltaTime就是1/120

那么此时我们如果将deltaTime乘上就会发现:

60HZ下, 物体移动距离为 60Speed1/60 =Speed
120HZ下, 物体移动距离为120Speed1/120 = Speed

两者相同了!同时按照我们给Speed的定义可知,物体现在移动的距离正式我们想要其1秒钟移动的距离。

这就是deltaTime的作用:让物体移动的距离在不同的刷新率的游戏环境中保持一致

原创不易,各位走过路过点个赞再走吧!

你可能感兴趣的:(游戏实用技术专栏,游戏,unity,游戏开发,unreal,c++)