Unity、C#常用的时间处理类
目录
1.Unity引擎内置时间类:Time
1.1.与游戏运行时间相关的字段
1.2.与帧间隔相关的字段(帧率控制)
1.3.时间缩放相关(暂停 / 慢动作)
2.C#系统时间类:System.DateTime
常用方法与字段
3.C#时间间隔类:System.TimeSpan
常用属性
本篇文章来分享一下在Unity,C#开发中常用的时间处理类,时间相关的操作非常常见,无论是控制动画播放、物体移动、冷却计时,还是帧同步等,都需要用到。
1.Unity引擎内置时间类:Time
Time
是Unity最核心的时间工具类,提供了与游戏运行、帧率、真实时间相关的各种属性,无需实例化即可直接使用。
1.1.与游戏运行时间相关的字段
字段/属性 | 说明 | 适用场景 |
---|---|---|
Time.time | 游戏启动到当前的总时间(秒),暂停时会继续累计(不受Time.timeScale 影响) | 记录游戏总运行时长、计算长期冷却(如每日任务重置) |
Time.timeSinceLevelLoad | 当前场景加载完成到现在的时间(秒),场景切换后重置为 0 | 记录当前场景运行时间(如场景内倒计时、限时任务) |
Time.unscaledTime | 游戏启动到当前的总时间(秒),完全不受暂停和Time.timeScale 影响 | 暂停时仍需运行的计时(如暂停菜单中的倒计时、UI 动画) |
Time.unscaledTimeSinceLevelLoad | 当前场景加载后不受timeScale 影响的时间,场景切换后重置 | 场景内不受暂停影响的计时(如场景加载后的强制引导时间) |
1.2.与帧间隔相关的字段(帧率控制)
字段/属性 | 说明 | 适用场景 |
---|---|---|
Time.deltaTime | 上一帧到当前帧的时间间隔(秒),受Time.timeScale 影响(timeScale=0 时为 0) | 基于时间的移动/旋转(如transform.Translate(Vector3.forward * speed * Time.deltaTime) ),确保不同帧率下速度一致 |
Time.unscaledDeltaTime | 上一帧到当前帧的真实时间间隔(秒),不受timeScale 影响 | 暂停时仍需更新的逻辑(如暂停时的鼠标悬停动画、实时计算帧率) |
Time.fixedDeltaTime | 固定物理帧间隔时间(默认0.02 秒,即50 帧/秒),可在Project Settings > Time 中修改 | 物理相关更新(FixedUpdate 中使用),如刚体运动、碰撞检测 |
Time.frameCount | 游戏启动到当前的总帧数 | 计算帧率(1/Time.deltaTime )、限制某操作的执行频率 |
1.3.时间缩放相关(暂停 / 慢动作)
字段/属性 | 说明 | 适用场景 |
---|---|---|
Time.timeScale | 时间缩放系数(默认1 ):- 0 :完全暂停(deltaTime 为0 ,FixedUpdate 不执行)- 0.5 :慢动作(时间流速减半)- 2 :快进(时间流速加倍) | 实现暂停功能、慢动作特效(如技能释放时的慢镜头)、加速游戏进程(如快进剧情) |
Time.fixedUnscaledDeltaTime | 固定物理帧的真实时间间隔(不受timeScale 影响),通常无需修改 | 极少数需要在暂停时仍执行物理更新的场景(需配合Physics.Simulate ) |
2.C#系统时间类:System.DateTime
System.DateTime
用于获取真实世界的日期和时间(与游戏运行无关),适用于需要与现实时间同步的场景。
常用方法与字段
方法/字段 | 说明 | 示例 |
---|---|---|
DateTime.Now | 获取当前本地时间(年/月/日/时/分/秒/毫秒) | DateTime now = DateTime.Now;//例如:2023-10-01 15:30:25 |
DateTime.UtcNow | 获取当前 UTC 时间(世界协调时间,无时区偏差) | 用于跨时区的时间同步(如服务器时间)。 |
DateTime.Today | 获取当前本地日期(时间部分为 00:00:00) | bool isNewDay = DateTime.Today != lastLoginDate;//判断是否跨天 |
AddXXX() 系列方法 | 对时间进行加减(AddDays /AddHours /AddMinutes 等) | DateTime tomorrow = DateTime.Now.AddDays(1);//明天此时 |
ToString() | 格式化时间字符串(自定义格式) | string timeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
TimeSpan | 表示两个时间的间隔(可通过DateTime 相减得到) | TimeSpan span = DateTime.Now - lastUpdateTime;//计算时间差 |
3.C#时间间隔类:System.TimeSpan
TimeSpan
用于表示两个时间点之间的间隔,常与DateTime
配合使用,提供了天、时、分、秒等单位的精确计算。
常用属性
TimeSpan span = new TimeSpan(1, 2, 30, 45);//表示 1 天 2 小时 30 分 45 秒
属性 | 说明 | 示例 |
---|---|---|
Days | 间隔中的总天数 | span.Days;//1 |
Hours | 间隔中的小时数(0-23) | span.Hours;//2 |
Minutes | 间隔中的分钟数(0-59) | span.Minutes;//30 |
Seconds | 间隔中的秒数(0-59) | span.Seconds;//45 |
TotalSeconds | 间隔的总秒数(含小数) | span.TotalSeconds;//1*86400 + 2*3600 + 30*60 + 45 = 95445 |
本次的分享到这里就结束啦,希望对你有所帮助~