首页/ 第 5 章 · C# 编程基础/ 第 74 课
LESSON 74 · C# 编程基础

Time.deltaTime 帧间隔时间

Time.deltaTime 已掌握,这是跨设备一致性的关键。下一课进入向量 Vector3。

⏱ 约 15 分钟📊 难度:入门🗂 第 5 章 · C# 编程基础📍 第 74 / 300 课
课程进度
74 / 300

🎯本节学习目标

  • 理解 deltaTime 的含义
  • 掌握移动必乘 deltaTime
  • 掌握 Time.time 等时间 API

🚀课程导读

这是新手 90% 都会犯的错:物体移动“忽快忽慢”。解药就是 Time.deltaTime。本课彻底讲透。

问题:帧率不同速度不同

先看错误示范。

  1. 错误写法(新手常见):Update 里写 transform.position += new Vector3(1, 0, 0);
  2. 意思是“每帧移动 1 米”:60 帧电脑每秒动 60 米,30 帧电脑每秒动 30 米!
  3. 同样代码在不同电脑上速度差一倍——这就是“帧率相关”的 bug。
  4. 【根因】Update 每帧调用,但帧率不固定,直接用“每帧固定值”就会随帧率漂移。
  5. 【解法】把“每帧的值”换算成“每秒的值”,乘以 Time.deltaTime。
Update 里所有“位移、加减速度、数值增减”都要乘 Time.deltaTime,这是铁律!

Time.deltaTime 是什么

“上一帧花了几秒”。

  1. Time.deltaTime = 从上一帧到当前帧所经过的时间(单位秒)。
  2. 60 FPS 时约 0.0167 秒;30 FPS 时约 0.033 秒。
  3. 【正确写法】transform.position += new Vector3(5f, 0, 0) * Time.deltaTime;
  4. 含义:每秒移动 5 米。无论帧率高低,一秒钟移动的总距离都是 5 米。
  5. 原理:高速率时每次乘的小(次数多),低帧率时每次乘的大(次数少),乘积趋同。
  6. 【其他时间 API】Time.time:游戏运行总时长;Time.fixedDeltaTime:固定步长(物理用);Time.timeScale:时间缩放(第 248 课)。
  7. 【时间缩放】改 Time.timeScale 可做慢动作,但 FixedUpdate 受 fixedDeltaTime 影响。
💡
deltaTime 单位是秒,所以“数值”表示“每秒多少”。写代码时把单位默认为“每秒”就对了。

实战验证

对比写与不写。

  1. 新建脚本 DeltaDemo 挂到 Cube 上。
  2. 先写错误版:在 Update 里 transform.position += Vector3.right;
  3. 播放观察 Cube 移动速度;打开帧率显示(Stats 面板或看控制台)体会速度。
  4. 改成正确版:transform.position += Vector3.right * Time.deltaTime;
  5. 现在速度是每秒 1 米,播放观察明显变慢且稳定。
  6. 把数值改成 5f:transform.position += Vector3.right * 5f * Time.deltaTime; 每秒 5 米。
  7. 加一个计时:Debug.Log(Time.time); 在 Update 里,观察每秒输出。
  8. 【补充】Unity 里还有更专业的移动方式(transform.Translate),也会配合 deltaTime(第 81 课)。
看到“position/velocity += ”就想到 * Time.deltaTime,形成条件反射。

常见错误与排查

错误:物体移动“一顿一顿”?
原因:可能是乘法写错位置或值过大
解决:确认乘的是 Time.deltaTime 而非 Time.time;数值单位按“每秒”设置。

动手练习

课后小任务(做出来才算真的学会)

  • 写一段每秒移动 3 米的代码
  • 对比写与不写 deltaTime 的速度差异
  • 用 Time.time 实现每 2 秒打印一次

本节小结

Time.deltaTime 已掌握,这是跨设备一致性的关键。下一课进入向量 Vector3。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课Debug.Log 调试输出