Ham*_*aif 4 c# time unity-game-engine
我正在学习 Unity 中的游戏开发。我最近在从教程中学习的代码中获得了 Time.deltaTime 函数的结构。我已经搜索过它以更好地理解,但没有了解使用它的主要目的,因为它以专业的方式解释。简而言之,我想要一些简单的解释。所以,我可以从中理解。
渲染和脚本执行需要时间。每帧都不同。如果你想要 ~60 fps,你将不会有稳定的 fps - 但每帧通过的时间量不同。如果速度太快,您可以等待,但如果速度慢于预期,则无法跳过渲染。
要处理不同长度的帧,您可以获得“Time.deltaTime”。它Update会告诉你完成最后一帧已经过去了多少秒(通常是像 0.00132 这样的分数)。
如果您现在使用以下代码将对象从 A 移动到 B:
object.transform.position += Vector3.forward * 0.05f;
Run Code Online (Sandbox Code Playgroud)
每帧将移动 0.05 个单位。100 帧后,它移动了 5 个单位。
有些电脑可能以 60 fps 运行此游戏,有些则以 144 Hz 运行。另外,帧速率不是恒定的。
所以你的物体需要 1-5 秒才能移动这个距离。
但如果你这样做:
object.transform.position += Vector3.forward * 5f * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)
它会在 1 秒内移动 5 个单位。与帧速率无关。因为如果您的帧率为 10000 fps,则 deltaTime 将非常非常小,因此每帧仅移动非常小的一点。
注意:从FixedUpdate()技术上讲,每帧并不是 100% 相同,但您应该表现得始终为 0.02f 或您设置的物理间隔。因此与帧速率无关,Time.deltaTimeFixedUpdate()将返回fixedDeltaTime
红色立方体:transform.position += Vector3.right * (1f / 60f);
绿色立方体:transform.position += Vector3.right * Time.deltaTime;
帧率锁定为 60 fps!(使用Application.targetFrameRate = 60;
你可以看到,绿色立方体总是在 5、10、15、20、25 处撞击右墙……起初它们看起来是同步的,但是一旦我摇动窗口,一些帧就会被丢弃(可能是编辑器的问题,但在真实游戏中,掉帧的原因有很多)。红色立方体永远不会赶上绿色立方体,丢失的帧永远不会重复。
这表明使用 deltaTime 更加一致+它给你一个很好的好处:你可以调整时间刻度Time.timeScale = .5f;来制作慢动作!