Unity基础学习(八)时间相关内容Time

        众所周知,每一个游戏都会有自己的时间。这个时间可以是内部,从游戏开始的时间,也可以是外部真实的物理时间,时间相关内容 主要用于游戏中 参与位移计时 时间暂停等。那么我们今天就来看看Unity中和时间相关的内容。

Unity时间功能速查表

类别属性/方法作用Time.timeScale影响应用场景示例代码
基础时间Time.time游戏启动后的累计时间(秒)计时器、技能冷却float startTime = Time.time;
Time.realtimeSinceStartup游戏启动后的真实时间(秒)实际游戏时长记录、不受暂停影响的逻辑float realTime = Time.realtimeSinceStartup;
Time.timeSinceLevelLoad当前场景加载后的累计时间(秒)场景事件触发if (Time.timeSinceLevelLoad > 10f) { ... }
增量时间Time.deltaTime上一帧到当前帧的时间间隔(秒)平滑运动、动画transform.Translate(Vector3.forward * speed * Time.deltaTime);
Time.unscaledDeltaTime上一帧到当前帧的真实时间间隔游戏暂停时的UI动画uiElement.Translate(Vector2.up * speed * Time.unscaledDeltaTime);
时间缩放Time.timeScale全局时间缩放(0=暂停,1=正常,>1=加速)-暂停、慢动作、加速效果Time.timeScale = 0; // 暂停游戏
固定时间步长Time.fixedDeltaTime物理更新(FixedUpdate)的时间间隔(默认0.02秒)刚体运动、物理模拟rigidbody.AddForce(Vector3.up * force * Time.fixedDeltaTime);
其他属性Time.frameCount游戏启动后的总渲染帧数性能测试、按帧触发逻辑if (Time.frameCount % 60 == 0) { ... } // 每秒执行一次
Time.maximumDeltaTime单帧最大允许时间(避免卡顿导致逻辑错误,默认0.333秒)-极端卡顿保护通过Edit > Project Settings > Time调整
协程与时间控制WaitForSeconds协程等待指定时间(受Time.timeScale影响)受时间缩放的延迟逻辑yield return new WaitForSeconds(2f);
WaitForSecondsRealtime协程等待真实时间(不受Time.timeScale影响)不受暂停影响的延迟逻辑yield return new WaitForSecondsRealtime(2f);
暂停与恢复Time.timeScale = 0暂停游戏逻辑(需额外暂停音频)-游戏暂停菜单Time.timeScale = 0; AudioListener.pause = true;
Time.timeScale = 1恢复游戏逻辑(需恢复音频)-恢复游戏运行Time.timeScale = 1; AudioListener.pause = false;

依次介绍:

一、什么是TimeScale?

        Time.timeScale 是 Unity 中一个全局控制游戏时间流速的浮点数值。你可以通过修改它的值,直接改变游戏内时间的流逝速度。说人话,就是倍速,你看视频有倍速选择吧,这个也是。这个就是里面的时间流速,等会我们可以结合着Time.time具体查看。

基本规则
默认值为 1,表示时间正常流逝。
设为 0:游戏时间完全暂停(类似“游戏暂停”效果)。
大于 1(如 2):时间加速(双倍速运行)。
介于 0 和 1(如 0.5):时间减速(慢动作效果)。

使用:

// 暂停游戏
Time.timeScale = 0;
// 恢复游戏
Time.timeScale = 1;
// 慢动作效果(50%速度)
Time.timeScale = 0.5f;

二、基础时间

1、Time.time:游戏启动后的累计时间(秒)

当我们在Update中打印时间信息时,发现就是游戏开始了多少时间。   

Debug.Log(Time.time);

接下来我们改变一下速度看看,可以看到明显快了很多。所以他是受到Time.timeScale影响的

Time.timeScale =2;
Debug.Log(Time.time);

 

2、Time.realtimeSinceStartup,游戏启动后的真实时间(秒)。就是游戏一旦开始,就开始计时。

将时间规模调至0后,时间仍在流逝,所以他不受timeScale的影响。 

 

3、Time.timeSinceLevelLoad:当前场景加载后的累计时间(秒)。简而言之就是从当前场景加载完成后开始计时。

可见其受到timeScale的影响。好的你应该以及知道了,关于timeScale这玩意的作用了,接下来我们不再赘述。

二、增量时间 

1、Time.deltaTime:上一帧到当前帧的时间间隔(秒)。

        这个是什么意思呢,意思就是:在游戏中我们的画面都是一帧一帧的拼凑起来的,他不是连续的,之所以我们看着是连续的,是因为其间隔时间很短很短,短倒你无法察觉。一般来说看视频24帧就行。但是,由于你的游戏是和你的设备性能息息相关的,所以帧率是波动的。也就是说一秒你可能跑90帧,别人跑120帧,那么他就可以在这多的30帧打你。但是每一帧的间隔时间你是可以在Unity中自己控制的,为了保证大家的帧率基本差不多,你可以将这个帧间隔时间设大一点,让大家处于同一起跑线。

        请看:可以看出并不固定。这就是帧的波动,取决于你的设备性能。下面的时间也是一样,只是不会受到Time.timeScale的影响。

 

2、Time.unscaledDeltaTime:上一帧到当前帧的时间间隔(秒)

将timeScale调为0

关于协程的时间相关我们后面学习协程的时候学习,现在先跳过。

三、其他属性

1、Time.fixedDeltaTime 物理更新(FixedUpdate)的时间间隔(默认0.02秒)

        请注意是在FixedUpdate中打印哈,不然你就会一直看到有数值。注意到当我们调成0之后,他就不会在增加次数了,所以他是有影响的。 

这个也分为受Time.timeScale影响和不受Time.timeScale影响的Time.fixedUnscaledDeltaTime

2、Time.frameCount 游戏启动后的总渲染帧数 这个就是帧数

3、Time.maximumDeltaTime:单帧最大允许时间(避免卡顿导致逻辑错误,默认0.333秒)

        Time.maximumDeltaTime是 Unity 中一个用于 防止极端卡顿导致逻辑异常 的安全机制。它的核心作用是限制单帧的增量时间(Time.deltaTime)的最大值,避免因帧率骤降引发游戏逻辑错误(如物体瞬移、物理穿透等)。 就是说当前这一帧解决不了的事情,给下一帧来解决,不要一直停留在原地,因为没有人会一直等你。  

四、快捷设置

在Edit ->ProjecSetting->Time下面可以自己设置相关的参数:

1. Fixed Timestep(固定时间步长)

        默认值:0.02 秒(对应每秒 50 次物理更新)。
        作用:控制物理引擎(FixedUpdate)的更新频率,确保物理模拟的稳定性。
值越小:物理模拟更精确,但 CPU 负担增加(如 0.01 秒对应每秒 100 次更新)。值越大:物理模拟频率降低,可能导致刚体运动不够平滑(如 0.04 秒对应每秒 25 次更新)。

2. Maximum Allowed Timestep(单帧最大允许时间步长)

        默认值:0.3333333 秒(约 333 毫秒)。
        作用:限制单帧的最大增量时间(Time.deltaTime),防止极端卡顿导致逻辑异常(如物体瞬移)。

工作原理

        当某一帧耗时超过此值时,Unity 会将时间拆分为多个小段(每段不超过该值),并逐段更新逻辑和物理。例如:若一帧耗时 1 秒,且此值设为 0.333,Unity 会将该帧拆分为 3 次逻辑更新(每次 0.333 秒)和 1 次剩余更新(0.001 秒)。

设置建议

        移动端或性能波动大的平台:保持默认值,避免逻辑失控。高精度物理游戏:可降低至 0.1 秒,但会增加 CPU 负载。

3.Maximum Particle Timestep(粒子系统最大时间步长)

默认值:0.03 秒(30 毫秒)。
作用:限制粒子系统(ParticleSystem)单帧更新的最大时间步长,防止极端卡顿导致粒子效果异常(如粒子突然爆炸或消失)。和上面的最大帧间隔时间类似

工作原理

        若一帧耗时超过此值,粒子系统会按此步长分段更新。例如,一帧耗时 0.1 秒,粒子系统会分 4 次更新(0.03 + 0.03 + 0.03 + 0.01)。

参数关联对象调整优先级典型场景
Fixed Timestep物理引擎(刚体)赛车游戏、物理解谜
Maximum Allowed Timestep游戏逻辑更新移动端游戏、开放世界
Time Scale全局时间控制动态调整暂停菜单、慢动作特效
Maximum Particle Timestep粒子系统爆炸特效、复杂粒子场景

就这样,债见! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java游戏服务器开发流水账(1)游戏服务器的架构浅析

新项目立项停滞,头大。近期读老项目代码看到Java,笔记记录一下。 为什么要做服务器的架构 游戏服务器架构设计具有多方面的重要意义,它直接关系到游戏的性能、可扩展性、稳定性以及用户体验等关键因素 确保游戏的流畅运行 优化数据处理&a…

计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术

基于Transformer的低照度图像增强技术通过结合Transformer的全局建模能力和传统图像增强理论(如Retinex),在保留颜色信息、抑制噪声和平衡亮度方面展现出显著优势。以下是其核心原理、关键公式及典型代码实现: 一、原理分析 1. 全局依赖建模与局部特征融合 Transformer的核…

Linux 文件目录管理常用命令

pwd 显示当前绝对路径 cd 切换目录 指令备注cd -回退cd …返回上一层cd ~切换到用户主目录 ls 列出目录的内容 指令备注ls -a显示当前目录中的所有文件和目录,包括隐藏文件ls -l以长格式显示当前目录中的文件和目录ls -hl以人类可读的方式显示当前目录中的文…

【Linux 系统调试】性能分析工具perf使用与调试方法

目录 一、perf基本概念 1‌. 事件类型‌ 2‌. 低开销高精度 3‌. 工具定位‌ 二、安装与基础配置 1. 安装方法 2. 启用符号调试 三、perf工作原理 1. 数据采集机制 2. 硬件事件转化流程 四、perf应用场景 1. 系统瓶颈定位 2. 锁竞争优化 3. 缓存优化 五、perf高级…

嵌入式中屏幕的通信方式

LCD屏通信方式详解 LCD屏(液晶显示屏)的通信方式直接影响其数据传输效率、显示刷新速度及硬件设计复杂度。根据应用场景和需求,LCD屏的通信方式主要分为以下三类,每种方式在协议类型、数据速率、硬件成本及适用场景上存在显著差异…

【el-admin】el-admin关联数据字典

数据字典使用 一、新增数据字典1、新增【图书状态】和【图书类型】数据字典2、编辑字典值 二、代码生成配置1、表单设置2、关联字典3、验证关联数据字典 三、查询操作1、模糊查询2、按类别查询(下拉框) 四、数据校验 一、新增数据字典 1、新增【图书状态…

【Spring】Spring MVC笔记

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

如何在大型项目中解决 VsCode 语言服务器崩溃的问题

在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况&#xff…

LeetCode百题刷002摩尔投票法

遇到的问题都有解决的方案,希望我的博客可以为你提供一些帮助 图片源自leetcode 题目:169. 多数元素 - 力扣(LeetCode) 一、排序法 题目要求需要找到多数值(元素个数>n/2)并返回这个值。一般会想到先…

Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法

一、问题描述 想把项目中某一个模块的代码单独打包成 aar ,之前是点击 AndroidStudio 右侧的 Gradle 选项,然后再点击需要打包的模块找到 build 进行打包,但是却发现没有 build 选项。 二、解决办法 1、设置中勾选 Configure all Gradle tasks… 选项 …

深入浅出之STL源码分析2_stl与标准库,编译器的关系

引言 在第一篇博客中,深入浅出之STL源码分析1_vector基本操作-CSDN博客 我们将引出下面的几个问题 1.刚才我提到了我的编译器版本是g 11.4.0,而我们要讲解的是STL(标准模板库),那么二者之间的关系是什么?…

(十二)深入了解AVFoundation-采集:人脸识别与元数据处理

(一)深入了解AVFoundation:框架概述与核心模块解析-CSDN博客 (二) 深入了解AVFoundation - 播放:AVFoundation 播放基础入门-CSDN博客 (三)深入了解AVFoundation-播放&#xff1…

Kafka 与 RabbitMQ、RocketMQ 有何不同?

一、不同的诞生背景,塑造了不同的“性格” 名称 背景与目标 产品定位 Kafka 为了解决 LinkedIn 的日志收集瓶颈,强调吞吐与持久化 更像一个“可持久化的分布式日志系统” RabbitMQ 出自金融通信协议 AMQP 的实现,强调协议标准与广泛适…

配置 Web 服务器练习

一、要求 1.通过https://ip 可以访问到网站首页 2.通过 https://ip/private/ 实现用户访问控制,仅允许已经添加的 tom,jerry 能够访问到 private 子路径的界面 3.通过 https://ip/vrit/ 实现能够访问到将系统 /nginx/virt 目录下的网页文件&#xff0…

MySQL索引详解(下)(SQL性能分析,索引使用)

索引是MySQL性能优化的核心,但如何精准分析查询瓶颈、合理设计索引,是开发者必须掌握的技能。本文结合实战案例,系统讲解SQL性能分析工具链与索引使用技巧,帮助读者构建高性能数据库系统。 一、SQL性能分析:从宏观到微…

招行数字金融挑战赛数据赛道赛题一

赛题描述:根据提供的用户行为数据,选手需要分析用户行为特征与广告内容的匹配关系,准确预测用户对测试集广告的点击情况,通过AUC计算得分。 得分0.6120,排名60。 尝试了很多模型都没有能够提升效果,好奇大…

ORB-SLAM3和VINS-MONO的对比

直接给总结,整体上orbslam3(仅考虑带imu)在初始化阶段是松耦合,localmap和全局地图优化是紧耦合。而vins mono则是全程紧耦合。然后两者最大的区别就在于vins mono其实没有对地图点进行优化,为了轻量化,它一…

安装typescript时,npm install -g typescript报错

删除C:\Users\用户\下的.npmrc文件,如果你的没有,看是不是因为将隐藏的项目勾选上了,然后去掉勾选。 重新输入

[GESP202503 四级] 二阶矩阵c++

题目描述 小 A 有一个 n 行 m 列的矩阵 A。 小 A 认为一个 22 的矩阵 D 是好的,当且仅当 。其中 表示矩阵 D 的第 i 行第 j 列的元素。 小 A 想知道 A 中有多少个好的子矩阵。 输入 第一行,两个正整数 n,m。 接下来 n 行,每行 m 个整数…

基于flask+pandas+csv的报表实现

基于大模型根据提示词去写SQL执行SQL返回结果输出报表技术上可行的,但为啥还要基于pandas去实现呢? 原因有以下几点: 1、大模型无法满足实时性输出报表的需求; 2、使用大模型比较适合数据量比较大的场景,大模型主要…